-5

这个语法是什么意思?

date aaa(2011,7,1);

除了 aaa,我可以使用我想要的任何东西(例如bbbor ccc)。看起来我创建了一个名为aaa并属于该类的新对象date。但据我所知,我们需要使用new关键字来创建一个新对象。

4

4 回答 4

7

它的意思是“通过调用一个构造函数来创建一个被data调用的实例,该构造函数接受三个整数参数(或可以从 int 隐式构造的参数)”。aaadate

在 C++ 中,您不需要关键字new来创建对象。new在动态存储中实例化一个对象并返回一个指向它的指针。除其他外,这意味着您(或某人,某处)必须负责在某个时候删除该对象。

于 2013-03-20T10:49:28.653 回答
5
int x;

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

int x = 5;

这定义了一个int名为的对象并将x其初始化为 5。直接初始化可以达到相同的结果:

int x(5);

那么呢:

data aaa(2011,7,1);

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

所有这些定义的共同点是它们创建了具有自动存储持续时间的特定类型的对象。这意味着对象将在其作用域结束时被销毁。

现在考虑以下行:

int* p = new int(5);

这将创建两个对象。第一个是被int*调用的pint*如上所述,它具有自动存储持续时间,并将在其范围结束时被销毁。然后我们用返回的指针初始化那个对象new int(5)。这个新表达式创建了一个int对象,初始化为 5,具有动态存储持续时间。这意味着它不会在其作用域结束时自动销毁,而是需要deleted。

因此,简而言之,这是创建对象的两种不同方法,它们赋予它们不同的存储持续时间。

于 2013-03-20T10:53:09.090 回答
1

在某些类似于C++ 的语言中,您可能需要new创建对象,例如 Java。但是在 C++ 中,您不必这样

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

于 2013-03-20T10:49:37.410 回答
0

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

于 2013-03-20T10:50:42.397 回答