具有指针数据成员的 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,它已经被之前的析构函数调用删除了。