具有指针数据成员的类对象的向量

时间:2019-11-24 16:31:24

标签: c++ c++11 c++-standard-library

假设我有一个这样的课程:

class example{
    double * ptr;

    public:
        example();
        ~example();
};

已实现方法:

example::example(){
    ptr = new double;
    *ptr = 0;
}
example::~example(){delete ptr;}

如果主要是我创建了std::vector<example> v;v.push_back(example());,则由于无效删除而导致分段错误。我不太确定是什么原因导致的,是否有办法解决。

预先感谢

1 个答案:

答案 0 :(得分:0)

您应该为原始指针编写复制/移动构造函数,默认构造函数仅按地址复制ptr。因此,您在example()临时对象和example内部向量中具有相同的ptr值。 为临时example对象调用了destructor,删除了ptr。然后从向量调用example析构函数,它尝试删除ptr,该ptr已被先前的析构函数调用删除。