C++删除一个对象

标签 c++ memory-management new-operator

我没有在 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/

相关文章:

c++ - 为什么我的 forward_ 函数不适用于右值?

c++ - 将 cout 输出到 std::string

c++ - 我们可以控制 vector 数组(c++)中元素的内存分配吗?

module - 无法在 OpenERP 6 中安装新模块

c++ - c++ 中的 malloc 和构造函数

c++ - 如何制作同步对象的字典?

c++ - 在 C/C++ 中使用 itoa 将整数转换为二进制字符串

c++ - 设置多线程调试 (/MTd) 时发生崩溃 (C++)

iphone - 奇怪的内存泄漏

c++ - 库中的新建和删除运算符覆盖