【发布时间】:2015-09-29 22:52:53
【问题描述】:
有一个问题是关于什么是 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;
};
【问题讨论】:
-
在您的第二个版本中,
m_int是一个悬空指针。value将在构造函数块的末尾被销毁。至于您的问题,只需查找 RAII,它将回答您关于裸新闻和删除不好的问题。
标签: c++ pointers wrapper delete-operator