C++:仅用于构造函数的内存泄漏
C++ : memory leak for just constructor
我正在从一个巨大的外部包创建一个类。我跑了:
Foo* foo = new Foo("bar", 100);
if(!foo)
{
delete foo;
}
带有
Foo::Foo(TString bar, int num)
{
setnull();
}
而setnull()只是将每个类指针设置为NULL,比如:
void Foo::setnull()
{
fooArray = NULL
...
}
和自毁
Foo::~Foo()
{
if(fooArray != NULL)
delete[] fooArray;
...
setnull();
}
实际上,在.hh文件中也有很多指向外部包中设置为NULL的类的指针。结果我得到了:
definitely lost: 332 bytes in 1 blocks
我也间接失去了添加构造函数:
fooArray = new (nothrow) bool [5];
if (fooArray == NULL)
{
cout << "ERROR: memory could not be allocated"<<endl;
}
fooArray[0] = 0;
带有
indirectly lost: 26 bytes in 2 blocks
(还有一件事,Stackoverflow的标题往往会吃掉"++"号)
Foo* foo = new Foo("bar", 100);
if(!foo)
{
delete foo;
}
如果是NULL
,则只删除foo
,如果new
返回一个对象,则不会删除它。
正如其他答案中指出的那样,这种逻辑是错误的:
if(!foo)
{
delete foo;
}
但无论如何都不必执行检查:在空指针中调用delete是不操作的,而且是完全安全的。因此,您可以将代码简化为
Foo* foo = new Foo("bar", 100);
delete foo;
当然,更简单、更安全的选择是
Foo foo("bar", 100);
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏