繁体   English   中英

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;
}

output 是程序输出

可能的原因是析构函数调用了两次,我试图从中获取一些信息: here and there but can't get clear vison。

正如评论中提到的,问题是析构函数中的删除语句,这对于非动态数据成员来说是不需要的。

暂无
暂无

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

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