假设我有一个这样的课程:
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());
,则由于无效删除而导致分段错误。我不太确定是什么原因导致的,是否有办法解决。
预先感谢
答案 0 :(得分:0)
您应该为原始指针编写复制/移动构造函数,默认构造函数仅按地址复制ptr。因此,您在example()临时对象和example
内部向量中具有相同的ptr值。
为临时example
对象调用了destructor,删除了ptr。然后从向量调用example
析构函数,它尝试删除ptr,该ptr已被先前的析构函数调用删除。