两个代码示例都可以毫无问题地编译和运行。使用第二个变体会导致内存泄漏。任何想法为什么?在此先感谢您的帮助。
变体 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;
};
Run Code Online (Sandbox Code Playgroud)
变体 2:
struct ParTabSpalteData
{
ParTabSpalteData(const SpParameterTabelle& tabelle, const string& id)
:Id(id)
{
// causes memory leak
Tabelle2 = tabelle;
}
SpParameterTabelle Tabelle2;
string Id;
};
Run Code Online (Sandbox Code Playgroud)
您是否检查过没有循环共享指针引用?
例如:
class A {
public: shared_ptr<A> x;
};
shared_ptr<A> a1(new A());
shared_ptr<A> a2(new A());
a1->x = a2;
a2->x = a1;
Run Code Online (Sandbox Code Playgroud)
这里 a1 和 a2 永远不会被释放,因为它们有彼此的指针,使它们保持活动状态。
因此,在您的情况下,请检查是否SpParameterTabelle有参考ParTabSpalteData或是否有另一种可能获得循环参考。
| 归档时间: |
|
| 查看次数: |
4948 次 |
| 最近记录: |