原始指针管理
Raw pointer management
是否适合一个类在"创建"方法中返回一个原始指针,并在其"销毁"方法中接受一个原始指针参数?上述类将指针存储在容器中,并通过destroy方法查找/删除指定对象。
或者我应该使用智能指针?如果我理解正确的话,智能指针表示所有权,但是类单独负责对象的创建和销毁。
问题是:您能以编程方式描述代码应该具有的获取/释放行为吗?如果是,即行为不是一系列没有任何模式的唯一事件,那么你可以编写一个实现此行为的句柄类。更重要的是,这个句柄类将能够保证行为,这就是智能指针的全部内容。这不仅仅是关于代码的正确性,而是关于扩展保证,使编写正确的代码更容易。
此外,智能指针并不总是表明所有权,尽管它们在大多数情况下都是这样。共享所有权(shared_ptr)和独占所有权(auto_ptr, unique_ptr)之间也有区别。然后,有一个没有所有权的引用(weak_ptr)。对我来说,这听起来像是你可能想要返回一个shared_ptr和一个相应的delete。然后,工厂可以保留weak_ptr来保留对相应对象的一些访问,而shared_ptr则保证正确的清理。不过,请确保定期从工厂内部清除过期的weak_ptrs。
在任何情况下我都不会返回一个原始指针。问题是:调用者完成后应该如何处理它?调用删除?调用一些特定的destroy()函数?这两种情况都可以由智能指针来处理。此外,如果工厂保留所有权并保留自己随时丢弃对象的权利,那么持有原始指针的人如何告知该指针将失效的事实?一个简单的答案是使用一个智能指针,它会收到通知,比如weak_ptr.
相关文章:
- 使用"Task"函数指针队列定义作业管理器
- 向量成员在管理类指针C++队列时丢失
- 函数指针和 lambda 的内存管理
- 如何将指针从unique_ptr传递到另一个对象并管理寿命
- 哪些资源是由智能指针管理的,而它们的内存不是由new分配的
- 底层指针和内存管理
- 坚持将双指针管理的内存复制到二维数组
- 智能指针,避免使用QNetworkAccessManager时进行手动内存管理
- 循环和内存管理中的指针算术C++?
- 可以通过非原始指针来增强容器矢量管理内存
- 管理到本机值类转换:强制转换指针是否安全?
- 指针的一系列指针:管理不同语言的字符串
- C 11 / 14-是否有针对其他地方管理的资源的原始指针包装器
- 编写安全包装类以管理用户定义对象的指针
- C++ |方法范围指针管理
- 如何在将指针传递给库函数时处理内存管理
- C++管理单一实例中的堆/指针
- 学生成绩管理系统 在C++中,表达式必须具有指向对象类型的指针
- 内存管理指针
- C++:在合并对象时管理指针