vector::emplace_back 结果调用析构函数两次
vector::emplace_back result to call destructor twice
简单的程序写成:
#include <iostream>
#include <vector>
using std::vector;
class Test {
public:
Test( int d ) : data(d), addr(&data) {
}
// Test( Test &src ) : data(src.data), addr(src.addr) { }
const int data;
const int *addr;
~Test() {
delete addr;
}
void print() {
std::cout << " Data is : " << data << '\n';
}
};
int main( int, char**, char** ) {
std::vector<Test> data1;
data1.emplace_back( 98 );
for( auto a : data1 )
a.print();
std::cout << "main";
std::cout << std::endl;
return 0;
}
输出是
可能是析构函数调用了两次
我试图从 : here and there 获取一些信息,但无法获得清晰的视觉效果。
如评论中所述,问题是析构函数中的 delete 语句对非动态数据成员来说是不需要的。
简单的程序写成:
#include <iostream>
#include <vector>
using std::vector;
class Test {
public:
Test( int d ) : data(d), addr(&data) {
}
// Test( Test &src ) : data(src.data), addr(src.addr) { }
const int data;
const int *addr;
~Test() {
delete addr;
}
void print() {
std::cout << " Data is : " << data << '\n';
}
};
int main( int, char**, char** ) {
std::vector<Test> data1;
data1.emplace_back( 98 );
for( auto a : data1 )
a.print();
std::cout << "main";
std::cout << std::endl;
return 0;
}
输出是
可能是析构函数调用了两次 我试图从 : here and there 获取一些信息,但无法获得清晰的视觉效果。
如评论中所述,问题是析构函数中的 delete 语句对非动态数据成员来说是不需要的。