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

问题描述 投票:0回答:1

假设我有这样的课程:

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个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.