shared_ptrs和三法则
shared_ptrs and the rule of three
我正在继续理解这些主题的过程,我想尝试将我的知识实际用于我之前已经创建的名为 ArrayList
的类,当创建类时创建的原始数组被填满时,它会动态分配内存。这就是我的类(部分)的样子:[我想大部分代码本身并不重要,我只是在展示我所拥有的。问题的重点是毕竟代码]
以下是负责向数组添加元素并在内存填满时重新分配内存的函数。追加函数可能看起来有点奇怪,因为我试图按升序放置元素,但那部分并不重要。
现在我已经发布了比预期占用更多空间的类,这是我的问题:
我将如何在此类中使用shared_ptrs?我知道shared_ptrs更容易管理动态分配的资源,但是在这种情况下,shared_ptr是否用于创建原始数组,并在将指向数组的指针分配给新数组时自动删除旧数组?我可以看到我将如何做到这一点,但这对三法则有什么影响[如果你使用shared_ptrs,我基本上不需要它]。我几乎觉得..在这种情况下,使用shared_ptr有两个维度;一个用于实际负责为对象本身分配和解除分配资源,但如果我想创建一个新对象并将原始对象的数组复制到第二个对象中,另一个也是如此......这是否有意义?我猜我会这样做
ArrayList AL(10);
shared_ptr<ArrayList> ptr = make_shared<ArrayList>(AL);
这是否有效地做了与我所做的相同的事情
ArrayList AL(10);
ArrayList AL2(AL);
除了它自己完成析构函数、复制构造函数和复制赋值运算符的工作吗?对不起,如果这一切都令人困惑和漫长,但我只是...困惑。
我不会在你的情况下使用std::shared_ptr
。由于总是只有一个所有者,我宁愿std::unique_ptr
.它基本上以相同的方式工作,但它不会进行引用计数(因为始终只有一个所有者持有资源)。
您不再需要删除析构函数中的arr
,并且需要修改以下行:
delete [] arr;
arr = new int[that.size];
像这样简单的事情:
arr.reset(new int[that.size]);
这将释放以前的实例(如果有),然后获得新实例的所有权。
- 引用 std::shared:ptr 以避免引用计数
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- 无法使用 libtool 将 -shared 参数传递给 g++
- 链接 boost 库时"Error while loading shared libraries"引发的,除了我无法使用 root 访问权限来修复它
- 将共享 ptrs 设置为空
- 解决方法:'can not be used when making a shared object; recompile with -fPIC'使用Cmake。使用普通的 g++ 工作
- gcc -fPIC vs. -shared
- 在shared_from_this()中的错误类型(在继承类中)(是否有dyn.type-ware shared Poi
- 如何将函数 ptr 分配给函数 ptrs 数组(Arduino C++)
- "directory containing symbolic versions of my app's shared libraries"的位置(ndk-stack)
- Qt自定义插件无法加载 - "Shared Library Not Found"
- C - Shared Library - dlopen, dlsym
- ubuntu 12.04 中的 openCV 程序编译错误"libopencv_core.so.2.4: cannot open shared object file: No such file or
- boost::shared_ptr和std::shared-ptr的同居
- 将GoogleMock与Boost::Shared Pointers一起使用时泄漏的Mock对象
- Singleton: C++ shared dll
- Boost Python , python functions and ptrs
- 传递"shared"指针的 OpenMP 任务
- 如何将参数push_back unique_ptr到共享 ptrs 的向量上
- "int *(&arry)[10] = ptrs;"的含义是什么?你怎么读这样的东西?