【问题标题】:C++ vector initialization? [duplicate]C++向量初始化? [复制]
【发布时间】:2012-03-03 19:37:17
【问题描述】:

可能重复:
Do the parentheses after the type name make a difference with new?
What do the following phrases mean in C++: zero-, default- and value-initialization?

我使用矢量没有任何问题,但我仍然对此有疑问。 我总是使用这样的代码,

vector<int>* v1 = new vector<int>;

那么,我可以使用:

vector<int>* v2 = new vector<int>(); 

我知道 () 做什么,但有什么区别?在 v1 中,向量是否曾经初始化任何整数?

【问题讨论】:

  • 你为什么使用new? vector&lt;int&gt; v1; 怎么了?

标签: c++ initialization


【解决方案1】:

首先您的问题:new 调用默认构造函数,您不需要“手动”执行此操作。 但是:尝试在 C++ 中尽可能频繁地使用值类型。它们不仅更快,而且更容易、更安全,因为在离开作用域时会自动调用析构函数。 所以就写

std::vector<int> v; // Calls default constructor

如果你真的需要堆,试试用shared_ptr和unique_ptr等智能指针,这样你就不会忘记调用delete了。 (而且delete也会调用析构函数,不需要手动执行。)

【讨论】:

    【解决方案2】:

    这两种说法都是一样的。在这两种情况下都会调用不带参数的构造函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-17
      • 2012-06-21
      • 2013-05-10
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多