用堆成员删除对象
Deleting objects with heap members
我正在研究BITSet实现。该比特组使用unsigned long long
的数组来存储位。
class bitset{
typedef unsigned long long uint64;
uint64* bits;
...
}
由于我需要此BITSET来存储大量数据,因此我发现,当我使用new
关键字初始化uint64
的数组来在堆上构建它时,它的效果最好。
bitset::bitset(int n_bits){
if (n_bits % 64 !=0) size (n_bits / 64) + 1;
else size = n_bits / 64;
this->data = new uint64[size];
}
执行操作允许我的程序始终允许我的整个程序访问一系列位。我遇到的一个问题是,我的破坏者似乎无法删除数据
bitset::~bitset(){
delete[] this->data;
}
在没有破坏者的情况下工作,我会得到记忆泄漏(如预期的(,而击曲线我会得到运行时错误 Error in `./a.out': double free or corruption (out):
我尝试过谷歌搜索无济于事。我是C 的新手,因此对课堂内的堆栈/堆行为的任何见解都将不胜感激。
您可以使用矢量容器:
class bitset{
...
std::vector<uint64> bits;
...
向量负责记忆分配,因此您不会意外删除内存或意外泄漏内存时不会出现问题。
P.S。unsigned long long
不能保证完全是64位。它可以比这大。如果这对您的程序至关重要,则应使用标准库中使用std::uint64_t
。这主要与将来的兼容性有关。
相关文章:
- 线程调用的函数对对象删除是否安全?
- 当我使用dynamic_cast并删除对象删除时,析构函数是如何工作的?
- 使用 com 对象删除计划任务
- C 将对象删除为参考
- C样式对象删除的包装器
- 静态映射中动态分配的对象.删除必要的
- C++指向对象删除的指针数组,"Debug assertion failure!"
- 在其成员函数返回之前,将对象删除是不确定的行为吗?
- Python 对象删除检测
- C++安全对象删除
- Qt:RemoveWidget和对象删除
- Qt对象删除导致崩溃
- 删除由两个shared_pointer实例管理的对象(删除其中一个)
- 顶点缓冲区对象(删除进程)opengl
- 设计 -- 按名称或对象删除
- 提升中的异常:进程间,共享内存对象删除
- 使用std::function和std::bind来存储回调并处理对象删除
- 如何使用智能指针防止双重对象删除
- 指针指向对象删除时自动为空
- 对象层次结构中的对象删除责任