繁体   English   中英

向量构造函数/析构函数调用

[英]vector constructor / destructor calls

我有以下代码:

#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::vector;

class A {
public:
  int i;
  A(int i=0):i(i) {
    cout << "A::A() called" << endl;
  }
  ~A() {
    cout << "A::~A() called" << endl;
  }

};

int main() {
  vector<A> *a = new vector<A>(3);
  delete a;
}

该程序打印:

A::A() called
A::~A() called
A::~A() called
A::~A() called
A::~A() called

为什么我看到一个构造函数和四个析构函数被调用?

我正在使用 g++ 4.8.4。

当您构造 A 的三个实例的向量时,它会填充默认值。 默认值取自向量构造函数参数。 您没有提供,因此它是由没有参数的构造函数或由具有默认参数值的构造函数构造的。 你提供了后者,所以第一个构造函数调用。

所有三个元素都是复制构造的,因此无需调用构造函数。

然后默认值实例被销毁,所以第一个析构函数。

然后删除向量,这会删除所有三个实例,调用析构函数三次。

尝试在函数中打印this值以自己尝试或尝试此示例: http : //coliru.stacked-crooked.com/a/903fa70484f5c3bc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM