c++中新建和删除ptr包装器类
C++ new and delete ptr wrapper class
有一个关于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++标准已经为您完成了这些工作。重新发明轮子是没有理由的。
相关文章:
- 如何在c++17中制作一个模板包装器/装饰器
- std::vector的包装器,使数组的结构看起来像结构的数组
- 如何在c++迭代器类型中包装std::chrono
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- 用pybind11包装C++抽象类时出错
- 为左值和右值的包装器实现C++范围
- CLANG 编译器 说:变量"PTR"可能未初始化
- C结构,其指针将被包装在unique_ptr中
- 如何包装第三方DLL在R中使用
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 将 N-arg 函数包装到另一个函数中
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 包装一个对象并假装它是一个 int
- 使用 Python Extension API 包装复杂C++类
- OpenCL enqueueWriteImage no const void* ptr 在包装器中C++但在 C 函数中
- 如何创建 std::string 包装器,它将 ptr 保留为 std::string 和 ptr 到创建该包装器实例的
- c++中新建和删除ptr包装器类
- 如何使用c++ Mat类ptr对象的基本C包装器打印Mat元素?