【发布时间】:2016-11-13 22:59:21
【问题描述】:
这里是 C++ 新手。以下是否会导致内存泄漏?
// debug is optional, for debugging purposes.
// Say my_string is an internal string class my company uses.
int DoSomething(my_string *debug) {
const my_string& s = GetString();
if (debug != nullptr) *debug = s; // Could this cause a memory leak?
return DoSomethingElse(s);
}
我想在这里检查我的理解:我认为在注释行中,debug 指向的内存区域将被s 的内容(副本)覆盖,除非有副本-为my_string 实现的构造函数,在这种情况下它也可能做一些其他的事情。
如果my_string 没有特殊的复制构造函数,那么如果my_string 在其内部表示中指向任何动态分配的内存(它可能会这样做,因为它可以保存任何长度的字符串),那么上面代码会导致内存泄漏。
另外,我猜还有一个关于预期 C++“礼仪”的问题——我是否可以假设写my_string 的人写了一个复制构造函数以避免在这种情况下发生内存泄漏?也就是说,由于我自己的代码中没有任何new,如果这段代码导致内存泄漏,是否可以合理地说这不是我的“错”?
编辑:我想也许我的意思是上面的复制赋值运算符而不是复制构造函数。
【问题讨论】:
-
my_string最好有一组单元测试来验证它不会泄漏,并且有一个使用它的好理由,而不是std::string.当然,这可能会泄漏my_string很烂。最终,如果您知道它很糟糕并且仍然使用它,那么是的,可以说它仍然是您的错。 -
也许是,也许不是。这取决于此处未显示的代码。
-
@WhozCraig @juanchopanza 是只依赖
my_string的实现还是也依赖GetString和DoSomethingElse?
标签: c++ memory-management memory-leaks