new/new()/new[] /new() 类型名/new 类型名() 的区别

1、直接new和new(X)的区别

Student* stu = new Student;
Student stu = new Student;

直接new A是创建一个不确定的对象或者实例

Student stu = new Student(XXXX);

new(X)则是创建一个被初始化值为X的实例或者对象
只有当A是POD类型的时候,new A和new A()才会有上面的区别
何为POD?POD是plain old data的缩写,它是一个struct或者类,且不包含析构函数以及虚函数
当不是POD时,有构造函数时,两个都被初始化为零,属于默认构造.,没有构造函数是,两个都初始化为一个随机值,且两个值相同.

2.new和new[]的区别

new 用于单个对象或者实例的创建,就是调用类的构造函数
new[]用于创建对象或实例的数组实例,并且地址是连续的
释放内存时,new使用 delete,而new[]则对应delete[]

3、new() 类型名和new 类型名()的区别

new 类型名(value),作用是申请内存并初始化,括号的的value是初始化值。
new (地址) 类型名

#include <iostream>
#include <cstdio>
using namespace std;

struct Student
{
	char name[20];
	char sex;
	int id;
	Student()
	{
		cout << "构造函数" << endl;	
	}
};

int main(int argc,const char* argv[])
{
	char arr[28];	
	cout << sizeof(Student) << endl;
	Student* stu = new(arr) Student;
	printf("%p %p\n",arr,stu);
}

如例子中在主函数中,实现申请了一块栈内存:char arr[28]; ,而Student* stu = new(arr) Student;便是将新申请的结构或者类stu不在申请新的内存,而是去使用已经申请好的栈内存,其中new(),括号里便是已经申请好的内存地址

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值