簡體   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