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(),括号里便是已经申请好的内存地址