【发布时间】:2017-06-02 14:11:53
【问题描述】:
我在 Ubuntu 14.04 上使用 GCC 编译器。
我有一个小型通讯应用程序(不是我写的),我打算将它嵌入到我自己的应用程序中。
小通讯。应用代码如下所示:
UartComm * commInterface;
...
void commInit()
{
commInterface = new UartComm;
}
// other functions here that use "commInterface"
// ...
int main()
{
commInit();
...
if(smthing_1)
return (-1);
if(smthing_2)
return (-2);
...
if(smthing_n)
return (-n);
//
return (0);
}
--
如上所见,原始代码中没有delete commInterface;,所以如果我将上面的代码嵌入到我的应用程序中,将main()重命名为commFunction()并多次调用它,我会有很多内存不是de -已分配。
上面的代码是一个简化版本。事实上,代码有很多退出点/返回。它还有一些抛出异常的函数(我不能 100% 确定它们都被正确捕获和处理)。
所以,我想在这种情况下,在所有 returns 之前添加 delete commInterface; 是不够的......
因此,我的问题是:有没有办法正确删除/释放commInterface,以便嵌入和使用上述模块而不必担心内存泄漏?可能是智能指针或其他想法...?
两点说明:
1)我已启用 C++ 11;
2) 我不使用(也不想使用)boost。
提前感谢您的时间和耐心。
【问题讨论】:
-
我建议考虑智能指针。
-
只有一个
commInterface可以在应用程序的整个生命周期内使用是否明智? - 即确保您只调用一次commInit。 -
真的需要动态分配吗?
-
我很好奇,boost 过敏背后的原因是什么?并不是说在这种情况下需要提升。
-
@user2079303:不是过敏。但有些同事建议的正是你所说的:不需要提升......
标签: c++ c++11 pointers memory-management smart-pointers