vector::emplace_back结果两次调用破坏函数。

问题描述 投票:0回答:1

简单的程序写成。

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

而输出是program output

可能是由于destructor调用了两次。我试着从: 这里那里 但不能得到清晰的视觉。

c++ vector c++17 destructor dynamic-memory-allocation
1个回答
2
投票

正如评论中提到的问题是 删去 在destructor中的语句,对于非动态数据成员来说是不需要的。

© www.soinside.com 2019 - 2024. All rights reserved.