【发布时间】:2019-10-18 09:15:41
【问题描述】:
我试图弄清楚,如果您创建一个共享指针,该指针指向一个保存在向量中的对象,会发生什么。
代码如下所示:
class TestObject
{
public:
int someTestData;
};
class Test
{
public:
std::shared_ptr<TestObject> testPointer;
std::shared_ptr<std::vector<TestObject>> getTestVector()
{
return testVector;
}
private:
std::shared_ptr<std::vector<TestObject>> testVector;
};
问题是,我既想支持对所有测试对象的快速迭代,又想提供指向向量中单个对象的共享指针。 但是现在我不知道如果向量中一个对象的最后一个共享ptr被删除会发生什么。
- 对象是否从向量中移除?
- 这会导致未定义的行为吗?
- 如果这不起作用,我该如何归档我想要的行为?
编辑:
澄清一下,我需要什么:
我需要一个 MemoryManager 类,它有一个 CreateTestObject 方法,它创建一个新的 TestObject,将它存储在一个向量或其他支持快速迭代的容器中,并向新创建的对象返回某种 shared_ptr,以便该对象需要一个新的 TestObject 有一个引用。
现在我还需要 TestObject 的 shared_ptr 以便能够在最后一个 shared_ptr 超出范围时从存储它的容器中删除 TestObject,这样我就不会留下一个充满未使用的 TestObject 的向量.
【问题讨论】:
-
您是否遗漏了部分代码?因为你的问题对我来说并不完全清楚
-
请尝试澄清您的实际需求。
-
iirc 共享指针欠它指向的东西,当指针的生命周期到期时,你真的希望向量中的对象被销毁吗? (然后当向量的生命周期到期时,它将破坏已经破坏的对象,ub)
-
您如何从
std::vector的对象中获取shared_ptr<TestObject>?testVector中的对象归std::vector所有。如果您使用这些地址创建shared_ptr,您几乎肯定只会导致未定义的行为。 -
@uneven_mark 我正在向量中创建对象,然后获取地址并创建共享 ptr 有没有办法归档我想要的行为?
标签: c++ vector shared-ptr