![](/img/trans.png)
[英]Why does vector::push_back and emplace_back call value_type::constructor twice?
[英]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 but can't get clear vison。
正如評論中提到的,問題是析構函數中的刪除語句,這對於非動態數據成員來說是不需要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.