gpt4 book ai didi

c++ - 缺少 shared_ref

转载 作者:太空狗 更新时间:2023-10-29 21:04:20 31 4
gpt4 key购买 nike

虽然经常使用 std::shared_ptr,但我有点想念 shared_ref 实现。这是 shared_ptr 的特化,它保证它永远不会包装 nullptr(当然,如果使用正确的话)。我有点奇怪为什么它不在 C++11 标准中。执行的时候有没有市长问题?在我的头顶上,我想不出任何东西。

编辑:

我希望有一个类似于以下的界面:

template <typename T>
class shared_ref {
public:
shared_ref( T&& ref );
T& get();
T* operator&() const;

template< class Y >
void reset( Y&& obj );

long use_count() const;
bool unique() const;

void swap( shared_ref& r );
};

最佳答案

Are there any mayor problems when implementing it?

这是一个:您不能取得引用的所有权。智能指针的全部意义在于声明指针本身的所有权。 shared_ref无法工作,因为您无法控制引用的生命周期。

不,这也不会飞:

shared_ref( T&& ref ) : p(&ref) {}

用户可能已经给了你一个堆栈变量,这意味着你在这个对象和堆栈变量之间拥有“共享”所有权。堆栈变量不能与某些东西共享所有权。

您只能控制指针的生命周期。指针可以为 NULL。因此,您唯一能做的就是运行时检查指针是否为 NULL。

你能做的绝对最好的是一个相当于shared_ptr的接口(interface)除了它没有默认构造函数并在被赋予 NULL 的情况下抛出。这真的值得创建一个全新的指针类型吗?


C++ 核心指南支持库有 not_null模板,可以应用于大多数类指针类型。所以你可以使用 not_null<shared_ptr>当你想验证一个指针不为 NULL 时,但只在它进入使用时验证一次。初始创建指针后,不需要再次检查。

当然,您不能强制其他人使用它们,但始终如一地使用该类型将解决问题。

关于c++ - 缺少 shared_ref,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11365149/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com