向量的内存管理
Memory management of vector
我有一个c++类,有一个私有的"指向向量的指针"成员pV,我在构造函数中给它分配了一个新的向量…
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;
}
相关文章:
- 当vector是tje全局变量时,c++中vector的内存管理
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 可以通过非原始指针来增强容器矢量管理内存
- 如何使用 std::vector<std::tuple<A,B>> 来管理内存(调整大小、保留,...),但实际上将 As 保留在 B 之前,连续
- 线程管理内存泄漏
- 通过读取文件创建映射<字符串,矢量>时如何管理内存<string>
- 管理内存C++
- ptr_vector如何管理内存
- 在C++Builder/Firemonkey中使用表单创建来管理内存
- 如何正确管理内存(运行时)C++
- 在Node.js中使用Native Abstractions时,如何管理内存
- ostream是如何管理内存的
- C++中管理内存泄漏的问题
- OpenCL:在 CPU 上而不是在 GPU 上更正结果:如何正确管理内存
- deque是如何管理内存的
- 用c++/cli互操作管理内存
- 如何衡量管理内存所花费的时间
- (加速C++)章节管理内存
- 如何在此场景中管理内存