【发布时间】:2011-02-13 17:25:16
【问题描述】:
这两个代码示例都能顺利编译和运行。 使用第二种变体会导致内存泄漏。任何想法为什么? 提前感谢您的帮助。
变体 1:
typedef boost::shared_ptr<ParameterTabelle> SpParameterTabelle;
struct ParTabSpalteData
{
ParTabSpalteData(const SpParameterTabelle& tabelle, const string& id)
:Tabelle(tabelle), Id(id)
{
}
const SpParameterTabelle& Tabelle;
string Id;
};
变体 2:
struct ParTabSpalteData
{
ParTabSpalteData(const SpParameterTabelle& tabelle, const string& id)
:Id(id)
{
// causes memory leak
Tabelle2 = tabelle;
}
SpParameterTabelle Tabelle2;
string Id;
};
【问题讨论】:
-
您是如何确定有泄漏的?
-
@Hassan:我的 IDE (Visual Studio 2008) 具有内存泄漏检测功能,在程序退出后在控制台中显示泄漏内存区域的地址。如果我使用变体一,泄漏控制台输出就消失了。
标签: c++ shared-ptr