gpt4 book ai didi

c++ - C++ 中的空 std::shared_ptr 和空 std::shared_ptr 有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 12:06:14 29 4
gpt4 key购买 nike

cplusplus.com shared_ptr page empty std::shared_ptrnull shared_ptr 之间存在区别。 cppreference.com page没有明确指出区别,但在其对 std::shared_ptr 行为的描述中使用了“空”和与 nullptr 的比较。

shared_ptr 和空 shared_ptr 有区别吗?这种混合行为指针有什么用例吗?非空 null shared_ptr 是否有意义?在正常使用中(即,如果您没有明确构造一个)是否会出现最终得到一个空但非空的 shared_ptr 的情况?

如果您使用的是 Boost 版本而不是 C++11 版本,这些答案是否会发生变化?

最佳答案

这是 shared_ptr 行为的一个奇怪的角落。它有一个构造函数,允许您创建一个 shared_ptr,该 拥有 的东西并指向 别的东西:

template< class Y > 
shared_ptr( const shared_ptr<Y>& r, T *ptr );

使用此构造函数构造的 shared_ptr r 共享所有权,但 指向 任何 ptr 指向(即调用 get()operator->() 将返回 ptr)。这对于 ptr 指向 r 拥有的对象的子对象(例如,数据成员)的情况非常方便。

您链接的页面调用了一个 shared_ptr 不拥有任何 empty,以及一个 shared_ptr 不指向任何内容(即,其 get() == nullptr) null。 (Empty 在这个意义上被标准使用;null 不是。)你可以构造一个 null-but-not-empty shared_ptr ,但不会很有用。一个空但非空的 shared_ptr 本质上是一个非拥有指针,可以用来做一些奇怪的事情,比如 passing a pointer to something allocated on the stack to a function expecting a shared_ptr (但我建议先打谁将 shared_ptr 放入 API)。

boost::shared_ptr 还有has this constructor ,他们称之为别名构造函数

关于c++ - C++ 中的空 std::shared_ptr 和空 std::shared_ptr 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25920681/

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