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

时间:2013-03-20 10:47:57

标签: c++ syntax types instantiation

这种语法是什么意思?

date aaa(2011,7,1);

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

4 个答案:

答案 0 :(得分:7)

这意味着“通过调用data的构造函数创建一个名为aaa的{​​{1}}实例,该构造函数接受三个整数参数(或可以从int隐式构造的参数)”。< / p>

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

答案 1 :(得分:5)

int x;

我确定您明白这定义了一个名为int的{​​{1}}对象。你使用x了吗?如果我们添加复制初始化怎么样:

new

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

int

那么:

x

这与上面的语法完全相同。我们正在创建一个名为int x(5); 的{​​{1}}类型的对象,这次我们将三个参数传递给它的构造函数。

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

现在考虑以下一行:

data aaa(2011,7,1);

这会创建两个对象。第一个是名为data的{​​{1}}。 aaa具有自动存储持续时间,如上所述,并将在其范围的末尾销毁。然后,我们使用int* p = new int(5); 返回的指针初始化该对象。此new-expression创建一个int*对象,初始化为5,动态存储持续时间。这意味着它不会在其范围的末尾自动销毁,但需要p d。

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

答案 2 :(得分:1)

在某些语言类似到C ++中,您可能需要new来创建对象,例如Java。但是在C ++中,你没有拥有 to。

在C ++中,您使用new在堆上创建新对象 ,例如,如果您需要在运行时动态创建一个对象。如果声明一个变量(例如示例中的变量),则它将在堆栈上创建,如果它是函数内的局部变量。只要它们的范围持续,这些对象才可用。

答案 3 :(得分:0)

new运算符在 heap 内存中实例化一个对象,该对象一直存在,直到调用delete。在您的示例中,对象在堆栈中实例化,并且仅存在于范围内(直到下一个})。