我没有在 C++ 程序中处理内存的经验,所以在这种情况下我想得到一些建议:
我想在一个类的函数中创建一个 new Object
,这在程序结束之前都是必不可少的。就我而言,如果我使用运算符 new
,我有时应该删除它。考虑到它必须在类内部初始化,我必须何时以及如何最终删除它?
最佳答案
我建议使用智能指针习语
#include <memory>
struct X
{
void foo() { }
};
std::share_ptr<X> makeX() // could also be a class member of course
{
return std::make_shared<X>();
}
int main()
{
std::share_ptr<X> stayaround = makeX();
// can just be used like an ordinary pointer:
stayaround->foo();
// auto-deletes <sup>1</sup>
}
如果指针确实是一个静态变量,您可以替换为 unique_ptr
(其工作方式类似,但在赋值时传递所有权;这意味着指针不必保留 引用计数)
注意要了解有关 C++ 智能指针的更多信息,请参阅 smart pointers (boost) explained
注意如果您没有对此的 TR1/C++0x 支持,您可以只使用 Boost Smartpointer
<子> 1 除非您泄漏 shared_ptr 本身的拷贝;这将是以前看不到的智能指针的一些奇怪用法:)
关于C++删除一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8310716/