繁体   English   中英

矢量的内存管理

[英]Memory management of vector

我有一个带有私有“指向矢量”成员pV的C ++类,我在构造函数中为它指定了一个新的向量...

pV = new vector<FMCounter>(n, FMCounter(arg1))>;

但是当我在类的析构函数中删除时

delete pV;

我得到一个段错误和一条消息,我正试图释放未首先分配的pv。 我检查了pV-> size()是4K的东西,所以我确信它是由new分配的内存。

具有所有权语义的指针成员(在构造函数中分配并在析构函数中释放)通常需要编写自定义复制构造函数和赋值运算符(通常称为三元规则 ),因为编译器生成的只会复制指针成员而不是其底层宾语。 因此,如果您在某些时候复制包含对象,最终会得到两个具有与成员相同指针的对象,而第二个被销毁的对象会尝试删除已删除的指针。

最简单的是你应该确保你的复制构造函数做了类似的事情

TheClass::TheClass(const TheClass &rhs)
    : pV(new vector<FMCounter>(*rhs.pV))
{
}

而你的分配操作员做了类似的事情

TheClass& TheClass::operator=(const TheClass &rhs)
{
    *pV = *rhs.pV
    return *this;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM