将对象或指针存储在矢量中
Store Object or Pointer in a Vector
我在这里问了一个非常相似的问题,但由于这是一个如此基本的问题,我想更准确地陈述我的(新)问题。
假设我有一个非常复杂的 A 类,A 的每个实例都存储在多个容器中,例如向量、队列,...
即使在静态设置中,这意味着对象被添加到容器中一次,并且不会被删除或修改:
容器现在应该包含指向对象或对象本身的指针吗?
如果您需要对象的副本 - 使用对象。如果您需要共享对象或需要多态行为 - 使用smart pointers
容器。在使用智能指针的情况下,您将具有自动对象销毁和多态行为。
例如:
std::vector<std::shared_ptr<MyObject>> v;
auto ptr = std::shared_ptr<MyObject>(new MyObject());
v.push_back(ptr);
如果需要存储唯一指针(无共享):
std::vector<std::unique_ptr<MyObject>> v;
auto ptr = std::unique_ptr<MyObject>(new MyObject());
v.push_back(std::move(ptr));
> 如果 A
的每个实例都存储在多个容器中,则必须存储(智能)指针而不是对象本身。 否则,每个容器都有自己唯一的副本。 修改一个容器中的实例不会影响其他容器。 即使你没有修改任何内容,存储完整的对象副本也不能说明你的意思,即,跨容器的实例实际上是相同的。
如果您的对象很大,或者复制成本高,或者复制起来很复杂,那么请存储智能指针。
相关文章:
- 如何使用 stl 容器有效地存储对象?(即根据其字段的值进行搜索)
- 线程上下文上的静态存储对象优化
- OOP - 存储对象和服务接口
- 为什么存储对象地址在缓冲区中会导致内存泄漏并删除它们
- 是否保证在销毁所有线程本地存储对象后销毁全局对象
- 使用列表存储对象
- 在c++中存储一个对象或不存储对象的首选方式是什么
- 更好的是:存储对象与存储指针
- 应用程序使用QMAP存储对象时停止响应
- 使用堆栈存储对象
- 如何在 std::map 中存储"对象类型"?
- 我应该如何存储对象
- 在 c++ 中存储对象的最佳策略是什么,确保名称唯一并能够在以后有效地检索它们
- 用于存储对象列表的最佳标准类
- 在C++中存储对象地址的数据结构
- 函子如何维护/存储对象的状态
- 我如何定义一个向量,并用C++在其中存储对象
- 存储对象以备将来使用(在重新启动程序时)
- C++/JNI-存储对象(jobject)在向量和数组中发生意外更改,C++或JNI问题
- 在多个容器中存储对象的最佳实践