有一个问题是关于什么是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;
};
答案 0 :(得分:0)
总有一种比使用new
更好的方法。绝对总是比使用delete
更好的方式。
查看std::shared_ptr<>
和std::unique_ptr<>
的文档。在它们之间,它们涵盖了在范围内存管理,内存资源自动释放,文件自动关闭,自动清零用于加密的内存等方面所需的每个场景......等等。这是因为这两个类都为您提供了提供自定义删除器的机会,因此无论您的内存释放需要多么复杂,它们都可以完美无瑕地安全地使用。
编写一个完整的作用域内存管理器类比起初看起来更难。 c ++标准已经为你完成了。重新发明那个特定的轮子没有好的理由。