【发布时间】:2017-04-14 15:22:03
【问题描述】:
最惯用的转换方式是什么?
std::array<SomeType,SIZE> arr;
std::vector<shared_ptr<SomeType>> vec; // <--- want to fill with pointers
// to items in arr
第二个问题 - 是否可以为 stack-allocated array 中的对象创建 shared_ptr ?一旦vec 被销毁,指针目标会被“释放”吗?
编辑
我需要这样的东西
class Element {
Element *next;
}
class Group {
std::vector<Element*> elems;
}
int main() {
...
std::array<Element,10> elems = {...};
std::array<Group,4> groups = {...};
// shuffle elems and assign to groups; set next-pointers in elems:
// group1: &elem10
// group2: &elem8 &elem5
// group3: &elem2 &elem7 &elem3
// group4: &elem4 &elem9 &elem1 &elem6
// at some point:
// save or load all elems and groups,
// preserving pointers elem->elem, group->elem
}
【问题讨论】:
-
你想要的是一个非拥有的指针,即。原始指针或 std::reference_wrapper
-
@boofaz
shared_ptr不关心对象是如何分配的,它只知道当引用计数变为零时必须调用删除器。使用默认删除器,您将收到对delete(或delete[])的调用,但由于您将指向局部变量,这将崩溃。你想在这里释放什么?也许展示一个更完整的例子...... -
你的实际用例是什么?
-
拥有原始指针通常被认为是坏的。由于 std::array 不管理动态内存所有权,因此首先不必担心。
-
@boofaz 告诉我们你想用谷物做什么,如果我们能看到全貌,会更容易提供帮助。
标签: c++ pointers containers shared-ptr smart-pointers