【问题标题】:Vector of class object with a pointer data member [duplicate]具有指针数据成员的类对象的向量[重复]
【发布时间】:2019-11-24 16:31:24
【问题描述】:

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

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());,则由于无效删除而导致分段错误。我不确定是什么原因造成的,是否有办法解决。

提前致谢

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    相关资源
    最近更新 更多