堆分配的对象是否存在永不为零的唯一所有者?

问题描述 投票:0回答:1

当前,我正在存储std::unique_ptr的集合以堆放分配的多态类型的对象:

struct Foo {
  virtual ~Foo() = default;
};
Collection<std::unique_ptr<Foo>> foos;

我需要的基本界面是将Foo的所有者放入/从foos引入。存储在foos中的对象永远都不应该是nullptr,因此我想用编译时检查替换运行时assert(owner_taken)。此外,我希望能够在可能为空的所有者的情况下使用非空所有者。

可能是,我需要存储类似unique_ref的东西,但是我该如何从foos中提取一个呢?我不需要副本,我想要存储的对象本身,所以owner->clone()不是解决方案。我也不能std::move(owner),因为此后“唯一引用”的状态将无效。

是否有一个清晰的设计决定?

c++ architecture null heap smart-pointers
1个回答
0
投票

堆分配的对象是否存在永不为零的唯一所有者?

© www.soinside.com 2019 - 2024. All rights reserved.