C ++ new和delete ptr包装器类

时间:2015-09-29 22:52:53

标签: c++ pointers wrapper delete-operator

有一个问题是关于什么是C ++ 包装类是,我认为他提供了一个很好的答案。他的用户名:来自Stack Overflow的GManNickG提供了以下代码及其答案:

class int_ptr_wrapper
{
public:
    int_ptr_wrapper(int value = 0) :
    mInt(new int(value))
    {}

    // note! needs copy-constructor and copy-assignment operator!

    ~int_ptr_wrapper()
    {
        delete mInt;
    }

private:
    int* mInt;
};

该代码提示我一个问题。我从几个不同的人那里听说,使用new和delete关键字被认为是不好的做法。 在某种情况下我应该使用new还是删除?另外如果我在上面编写如下代码,这被认为是更好的做法?

class int_ptr_wrapper
{
public:
    int_ptr_wrapper(int value = 0) :
        m_int(&value) {}
private:
    int* m_int;
};

1 个答案:

答案 0 :(得分:0)

总有一种比使用new更好的方法。绝对总是比使用delete更好的方式。

查看std::shared_ptr<>std::unique_ptr<>的文档。在它们之间,它们涵盖了在范围内存管理,内存资源自动释放,文件自动关闭,自动清零用于加密的内存等方面所需的每个场景......等等。这是因为这两个类都为您提供了提供自定义删除器的机会,因此无论您的内存释放需要多么复杂,它们都可以完美无瑕地安全地使用。

编写一个完整的作用域内存管理器类比起初看起来更难。 c ++标准已经为你完成了。重新发明那个特定的轮子没有好的理由。