有一个问题被问到什么是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;
};发布于 2015-09-30 07:03:11
(几乎)总有比使用new更好的方法。绝对有比使用delete更好的方法。
请看一下std::shared_ptr<>和std::unique_ptr<>的文档。它们涵盖了您需要的所有场景,包括作用域内存管理、自动释放内存资源、自动关闭文件、自动清零用于加密的内存……诸若此类。这是因为这两个类都为您提供了提供自定义deleter的机会,因此无论您的内存回收需求有多复杂,都可以完美而安全地满足这些需求。
编写一个完整的作用域内存管理器类比乍看起来要难。c++标准已经为您做到了这一点。没有很好的论据可以重新发明这个轮子。
https://stackoverflow.com/questions/32855028
复制相似问题