Why do I need to call new?
Possible Duplicates:
When to use “new” and when not to, in C++?
When should I use the new keyword in C++?
似乎我可以在没有使用
根据我的理解,这是因为我会耗尽堆栈内存。
它是否正确? 我想我的主要问题是,我什么时候应该打电话给
这是对象生存期的问题:如果堆栈分配对象,当这些对象超出范围时(例如,在方法结束时),将调用对象析构函数。这意味着如果您将这些对象从创建它们的方法中传出,您将发现自己的内存指针可以随时被覆盖。
这是因为在编译时你可能不知道你是否需要一个对象,或者需要多少,或者什么类型。
这是一个事先不知道对象类型的例子:
1 2 3 4 5 6 7 | class Account { ... }; class CheckingAccount : public Account { ... }; class VisaAccount : public Account { ... }; ... Account *acct = type =="checking" ? new CheckingAccount : new VisaAccount; |
您需要使用new / delete的主要原因是手动控制对象的生命周期。
其他原因已经由其他人提供,但我认为这更重要。使用堆栈,您可以很好地了解对象的生命周期。但是,如果您希望仅在事件发生后销毁对象,则无法自动定义它。
堆栈上创建的数据/对象的生命周期仅限于块。你不能返回它的引用/指针。对于跨函数可用的数据,可以使用
您可以编写许多非平凡的程序,而无需调用"新"。 (或删除)。
您无法做到的事情(至少在没有编写或使用您自己的等价物的情况下)决定在运行时要创建的对象类型或数量,因此您将限制自己。
[更新]
您可以使用new来创建某个类的新实例,或者分配内存(例如对于数组),例如
Object o = new Object();
在创建类Object的新实例之前,您无法使用它。 (除非你有静态方法。)(这只是一个使用示例,有时其他对象将实例化或销毁你需要/不需要的对象)
这里有很多好的答案,但很难在SO的一个回复中解释关于new的所有内容,如果你不理解在调用new时会发生什么,那么很难知道何时使用它。这是编程中最重要的领域之一,所以在阅读了基本信息后,您应该更详细地研究它。以下是您可以开始研究的可能文章之一:
http://en.wikipedia.org/wiki/New_%28C%2B%2B%29
你必须学习的主题,以便了解当你调用new时会发生什么,这样你就可以理解何时调用它(有更多可能,但这是我现在能想到的):
- 构造函数(和析构函数)
- 静态类和方法
...