向量构造函数/析构函数调用
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的三个实例的vector时,用默认值填充。默认值取自向量构造函数参数。您没有提供,因此它是由不带参数的构造函数或具有默认参数值的构造函数构造的。你提供了后者,所以第一个构造函数调用。
所有三个元素都是复制构造的,因此不会调用您的构造函数。
然后默认值实例被销毁,所以第一个析构函数。
然后删除向量,删除所有三个实例,调用析构函数三次。
尝试在函数中打印 this
的值以自己尝试或尝试此示例:http://coliru.stacked-crooked.com/a/903fa70484f5c3bc
我有以下代码:
#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的三个实例的vector时,用默认值填充。默认值取自向量构造函数参数。您没有提供,因此它是由不带参数的构造函数或具有默认参数值的构造函数构造的。你提供了后者,所以第一个构造函数调用。
所有三个元素都是复制构造的,因此不会调用您的构造函数。
然后默认值实例被销毁,所以第一个析构函数。
然后删除向量,删除所有三个实例,调用析构函数三次。
尝试在函数中打印 this
的值以自己尝试或尝试此示例:http://coliru.stacked-crooked.com/a/903fa70484f5c3bc