如何在C++中创建新的objectc?

Rom*_*man -5 c++ syntax types instantiation

这个语法是什么意思?

date aaa(2011,7,1);
Run Code Online (Sandbox Code Playgroud)

而不是aaa我可以使用我想要的任何东西(例如bbbccc).看起来我创建了一个名为aaa属于该类的新对象date.但我们知道我需要使用new关键字来创建一个新对象.

jua*_*nza 7

它的意思是"创建的一个实例data称为aaa通过调用构造的date,其采用三个整数参数(或可以从int被隐式构造参数)".

在C++中,你并不需要的new关键字来创建一个对象.new在动态存储中实例化一个对象并返回一个指向它的指针.除此之外,它意味着您(或某人,某处)必须承担在某些时候删除对象的责任.


Jos*_*eld 5

int x;
Run Code Online (Sandbox Code Playgroud)

我确定你明白这定义了一个int名为的对象x.你用过new吗?如果我们添加复制初始化怎么样:

int x = 5;
Run Code Online (Sandbox Code Playgroud)

这定义了一个int名为的对象x,并将其初始化为5.使用直接初始化可以实现相同的结果:

int x(5);
Run Code Online (Sandbox Code Playgroud)

那么怎么样:

data aaa(2011,7,1);
Run Code Online (Sandbox Code Playgroud)

这与上面的语法完全一样.我们正在创建一个data名为的对象aaa,这次我们将三个参数传递给它的构造函数.

所有这些定义的共同之处在于它们创建具有自动存储持续时间的特定类型的对象.这意味着对象将在其范围的末尾被销毁.

现在考虑以下行:

int* p = new int(5);
Run Code Online (Sandbox Code Playgroud)

这会创建两个对象.第一个int*叫做p.这int*具有自动存储持续时间,如上文刚,和将在其范围的端部被破坏.然后我们用返回的指针初始化该对象new int(5).此new-expression创建一个int初始化为5 的对象,具有动态存储持续时间.这意味着它不会在其范围的末尾自动销毁,但需要为deleted.

因此,简而言之,这是创建对象的两种不同方式,这些对象为它们提供不同的存储持续时间.