我有以下结构:
typedef Memory_managed_data_structure T_MYDATA;
std::vector<T_MYDATA *> object_container;
std::vector<T_MYDATA *> multiple_selection;
T_MYDATA * simple_selection;
编辑:这可能非常重要:Memory_managed_data_structure 除其他外包含指向其他一些数据的苦涩原始指针。
它旨在成为内存管理对象(object_container)的原始容器的非常简单的表示,然后是“multiple_selection”数组(用于选择范围内的许多对象并对其进行各种操作)和“simple_selection”指针(用于执行对单个对象的这些操作)。
所有对象的生命周期都由 object_container 管理,而 multiple_selection 和 simple_selection 只是指向其中的一些。可以根据需要取消multiple_selection 和simple_selection,并且只能删除object_container 对象。
系统工作得很好,但我现在正试图进入 shared_ptrs 并希望将结构更改为:
typedef Memory_managed_data_structure T_MYDATA;
std::vector<std::shared_ptr<T_MYDATA> > object_container;
std::vector<std::shared_ptr<T_MYDATA> > multiple_selection;
std::shared_ptr<T_MYDATA> simple_selection;
同样,对象容器将是“所有者”,其余的只是指向它们。我的问题是,这个方案会在应用程序中造成严重破坏吗?在滚雪球进入这些变化之前我应该知道些什么?shared_ptr 不是这里合适的指针吗?
如果它不在 object_container 中,我可以在一定程度上保证在 multiple_selection 或 simple_selection 中不存在任何对象。当然,在multiple_selection 或simple_selection 中不会调用delete。
谢谢你的时间。
编辑:忘了提,以前从未使用过这些自动指针,所以我可能对它们的用途感到非常困惑。任何提示和经验法则将不胜感激。