为什么我需要拨打新电话?

时间:2010-04-27 12:31:03

标签: c++ new-operator

  

可能重复:
  When to use “new” and when not to, in C++?
  When should I use the new keyword in C++?

似乎我可以在不使用单词new的情况下编程,我也不必担心删除任何内容,为什么我应该调用它?

根据我的理解,这是因为我会耗尽堆栈内存。

这是对的吗?我想我的主要问题是,我应该何时致电new

6 个答案:

答案 0 :(得分:8)

这是对象生存期的问题:如果堆栈分配对象,当这些对象超出范围时(例如,在方法结束时),将调用对象析构函数。这意味着如果您将这些对象从创建它们的方法中传出,您将发现自己的内存指针可以随时被覆盖。

答案 1 :(得分:5)

这是因为在编译时你可能不知道你是否需要一个对象,或者多少,或者什么类型。 new运算符允许您动态分配对象,而无需事先知道这些事情。

这是一个事先不知道对象类型的例子:

class Account { ... };
class CheckingAccount : public Account { ... };
class VisaAccount : public Account { ... };

...

Account *acct = type == "checking" ? new CheckingAccount : new VisaAccount;

答案 2 :(得分:4)

您需要使用new / delete的主要原因是手动控制对象的生命周期。

其他原因已经由其他人提供,但我认为这更重要。使用堆栈,您可以很好地了解对象的生命周期。但是,如果您希望仅在事件发生后销毁对象,则无法自动定义它。

答案 3 :(得分:1)

堆栈上创建的数据/对象的生命周期仅限于块。你不能返回它的引用/指针。要使跨函数可用的数据,您可以使用new在堆上创建它。当然,它可以处于更高层次,甚至是全球层面。但是你很少在编译时知道在运行时需要多少数据/多少个对象。

答案 4 :(得分:0)

你可以编写许多非平凡的程序而无需调用“new”。 (或删除)。

您无法做到的事情(至少在没有编写或使用您自己的等价物的情况下)决定在运行时要创建的对象类型或数量,因此您将限制自己。< / p>

答案 5 :(得分:-2)

[更新]

您可以使用 new 创建某个类的新实例,或者分配内存(例如用于数组),例如

对象o = new Object();

在创建类Object的新实例之前,您无法使用它。 (除非你有静态方法。)(这只是一个使用示例,有时其他对象将实例化或销毁你需要/不需要的对象)

这里有许多好的答案,但很难在SO的一个回复中解释关于新的所有内容,如果你不理解调用new时会发生什么,那么很难知道何时使用它。这是编程中最重要的领域之一,所以在阅读了基本信息后,您应该更详细地研究它。以下是您可以开始研究的可能文章之一:

http://en.wikipedia.org/wiki/New_%28C%2B%2B%29

你必须学习的主题,以便了解当你打电话给新的时会发生什么,这样你就可以理解何时调用它(有更多可能,但这是我现在能想到的): - 构造函数(和析构函数) - 静态类和方法 ...