如何在C++中创建新对象?

如何在C++中创建新对象?,c++,syntax,types,instantiation,C++,Syntax,Types,Instantiation,这个语法是什么意思 date aaa(2011,7,1); 我可以用我想要的任何东西代替aaa,例如bbb或ccc。看起来我创建了一个名为aaa的新对象,它属于类date。但据我所知,我需要使用new关键字来创建一个新对象 这意味着通过调用date的构造函数来创建一个名为aaa的数据实例,该构造函数接受三个整数参数或可以从int隐式构造的参数 在C++中,不需要新的关键字来创建对象。new在动态存储中实例化一个对象,并返回指向该对象的指针。在其他方面,它意味着你或某人在某个地方必须承担删除某个

这个语法是什么意思

date aaa(2011,7,1);

我可以用我想要的任何东西代替aaa,例如bbb或ccc。看起来我创建了一个名为aaa的新对象,它属于类date。但据我所知,我需要使用new关键字来创建一个新对象

这意味着通过调用date的构造函数来创建一个名为aaa的数据实例,该构造函数接受三个整数参数或可以从int隐式构造的参数

在C++中,不需要新的关键字来创建对象。new在动态存储中实例化一个对象,并返回指向该对象的指针。在其他方面,它意味着你或某人在某个地方必须承担删除某个对象的责任。

< P>在类似C++的一些语言中,你可能需要新的创建对象,例如java。但是C++中没有必要。


在C++中,你可以使用新的方法来创建堆上的新对象,例如,如果你需要在运行时动态创建一个对象。如果您声明了一个变量,例如示例中的变量,那么如果它是函数中的局部变量,那么它将在堆栈上创建。这些对象只有在其作用域持续时才可用。

新操作符在堆内存中实例化一个对象,并且该对象在调用delete之前一直存在。在您的示例中,对象在堆栈中实例化,并且只存在于作用域中,直到下一个}

我确信您理解这定义了一个名为x的int对象。你用新的吗?如果我们添加复制初始化,效果如何:

int x = 5;
int x(5);
这定义了一个名为x的int对象,并将其初始化为5。直接初始化也可以获得相同的结果:

int x = 5;
int x(5);
那么:

data aaa(2011,7,1);
这与上面的语法完全相同。我们正在创建一个名为aaa的数据类型的对象,就在这一次,我们将三个参数传递给它的构造函数

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

现在考虑下面的行:

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


P> >简而言之,这是两种不同的创建对象的方法,它们给了它们不同的存储持续时间。

请至少阅读一个C++教程,供初学者使用。仅仅通过提问来学习一门语言是很难的。这需要很长的时间来解释。我想你应该抓取一本关于C++的书,读一读关于对象创建的章节。其他人怎么说。在询问C++问题之前先学习一些C++。这太基本了,我怎么移动海龟的标志?任何人再看一百遍:C++不是java。然后得到一本关于C++的书。不是Java,很公平。这是Java程序员长大后常见的误解;将对象初始化为5。int x=5;没有。它创建对象并为其指定5。调用构造函数T和操作符=int与Tint之间存在语义差异。OP问了这样一个基本的问题,我认为最好保持答案的超级严格。还是我错了,Tint会被称为?@luk32 int x=5;不执行任何赋值-这是复制初始化,在本例中与执行int x5;的效果完全相同;。这里不使用运算符。好吧,我的错。很抱歉我觉得它们在语义上是不同的。好的,它们在语义上是不同的。我知道int的结果是一样的。但它可能非常不同,在一般情况下,复制/直接初始化是不可互换的。这是我的出发点,尽管我对实际发生的事情错了。感谢您指出。@luk32如果LHS和RHS上的类型不同,那么它们在语义上是不同的。但仍然没有涉及任何任务。