首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++新建和删除ptr包装类

C++新建和删除ptr包装类
EN

Stack Overflow用户
提问于 2015-09-30 06:52:53
回答 1查看 644关注 0票数 0

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

代码语言:javascript
复制
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吗?另外,如果我像下面这样写上面的代码,哪一个被认为是更好的实践?

代码语言:javascript
复制
class int_ptr_wrapper
{
public:
    int_ptr_wrapper(int value = 0) :
        m_int(&value) {}
private:
    int* m_int;
};
EN

回答 1

Stack Overflow用户

发布于 2015-09-30 07:03:11

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

请看一下std::shared_ptr<>std::unique_ptr<>的文档。它们涵盖了您需要的所有场景,包括作用域内存管理、自动释放内存资源、自动关闭文件、自动清零用于加密的内存……诸若此类。这是因为这两个类都为您提供了提供自定义deleter的机会,因此无论您的内存回收需求有多复杂,都可以完美而安全地满足这些需求。

编写一个完整的作用域内存管理器类比乍看起来要难。c++标准已经为您做到了这一点。没有很好的论据可以重新发明这个轮子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32855028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档