具有指针数据成员的 class 对象的向量
Vector of class object with a pointer data member
假设我有一个 class 就像这样:
class example{
double * ptr;
public:
example();
~example();
};
实施方法:
example::example(){
ptr = new double;
*ptr = 0;
}
example::~example(){delete ptr;}
如果在 main 中,我创建了一个 std::vector<example> v;
和 v.push_back(example());
,我只会因无效删除而出现分段错误。我不太确定是什么原因造成的,是否有办法解决它。
提前致谢
您应该为原始指针编写 copy/move 构造函数,默认构造函数只是按地址复制 ptr。因此,您在 example() 临时对象和 example
内部向量中具有相同的 ptr 值。
为临时 example
对象调用析构函数,删除 ptr。然后 example
从 vector 调用析构函数,它试图删除 ptr,它已经被之前的析构函数调用删除了。
假设我有一个 class 就像这样:
class example{
double * ptr;
public:
example();
~example();
};
实施方法:
example::example(){
ptr = new double;
*ptr = 0;
}
example::~example(){delete ptr;}
如果在 main 中,我创建了一个 std::vector<example> v;
和 v.push_back(example());
,我只会因无效删除而出现分段错误。我不太确定是什么原因造成的,是否有办法解决它。
提前致谢
您应该为原始指针编写 copy/move 构造函数,默认构造函数只是按地址复制 ptr。因此,您在 example() 临时对象和 example
内部向量中具有相同的 ptr 值。
为临时 example
对象调用析构函数,删除 ptr。然后 example
从 vector 调用析构函数,它试图删除 ptr,它已经被之前的析构函数调用删除了。