这个语法是什么意思?
date aaa(2011,7,1);
除了 aaa,我可以使用我想要的任何东西(例如bbb
or ccc
)。看起来我创建了一个名为aaa
并属于该类的新对象date
。但据我所知,我们需要使用new
关键字来创建一个新对象。
这个语法是什么意思?
date aaa(2011,7,1);
除了 aaa,我可以使用我想要的任何东西(例如bbb
or ccc
)。看起来我创建了一个名为aaa
并属于该类的新对象date
。但据我所知,我们需要使用new
关键字来创建一个新对象。
它的意思是“通过调用一个构造函数来创建一个被data
调用的实例,该构造函数接受三个整数参数(或可以从 int 隐式构造的参数)”。aaa
date
在 C++ 中,您不需要关键字new
来创建对象。new
在动态存储中实例化一个对象并返回一个指向它的指针。除其他外,这意味着您(或某人,某处)必须负责在某个时候删除该对象。
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*
调用的p
。int*
如上所述,它具有自动存储持续时间,并将在其范围结束时被销毁。然后我们用返回的指针初始化那个对象new int(5)
。这个新表达式创建了一个int
对象,初始化为 5,具有动态存储持续时间。这意味着它不会在其作用域结束时自动销毁,而是需要delete
d。
因此,简而言之,这是创建对象的两种不同方法,它们赋予它们不同的存储持续时间。
在某些类似于C++ 的语言中,您可能需要new
创建对象,例如 Java。但是在 C++ 中,您不必这样做。
在 C++ 中,您可以在堆上new
创建一个新对象,例如,如果您需要在运行时动态创建一个。如果您声明一个变量,例如示例中的变量,如果它是函数内的局部变量,它将在堆栈上创建。这些对象仅在其范围持续时才可用。
new 运算符在堆内存中实例化一个对象,并且该对象一直存在,直到调用 delete 为止。在您的示例中,该对象在堆栈中实例化并且仅存在于范围中(直到下一个}
)。