c++中新建和删除ptr包装器类

C++ new and delete ptr wrapper class

本文关键字:包装 ptr 删除 新建 c++      更新时间:2023-10-16

有一个关于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或delete吗?另外,如果我像下面这样写上面的代码,哪个被认为是更好的实践?
class int_ptr_wrapper
{
public:
    int_ptr_wrapper(int value = 0) :
        m_int(&value) {}
private:
    int* m_int;
};

(几乎)总是有比使用new更好的方法。绝对有比delete更好的方法。

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

编写一个完整的作用域内存管理器类比乍看起来要难。c++标准已经为您完成了这些工作。重新发明轮子是没有理由的。