C++ 如果I std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的共享_ptr是否保证在内部存储null?
为什么我对此有点困惑: std::shared_ptr可以为空,std::shared_ptr可以指向null,这两个概念并不等价 空的共享\u ptr可以存储非null值,而存储null的共享\u ptr可以具有正的ref计数 我现在想知道的是,在std::dynamic_pointer_转换之后,如何正确地测试转换是否成功?文件规定:C++ 如果I std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的共享_ptr是否保证在内部存储null?,c++,shared-ptr,C++,Shared Ptr,为什么我对此有点困惑: std::shared_ptr可以为空,std::shared_ptr可以指向null,这两个概念并不等价 空的共享\u ptr可以存储非null值,而存储null的共享\u ptr可以具有正的ref计数 我现在想知道的是,在std::dynamic_pointer_转换之后,如何正确地测试转换是否成功?文件规定: 3-4)动态\u转换(r.get())(如果动态\u转换的结果是空指针值,则返回的共享\u ptr将为空。) 但是,由于空的共享ptr不能保证存储空值,我不
3-4)动态\u转换(r.get())(如果动态\u转换的结果是空指针值,则返回的共享\u ptr将为空。)
但是,由于空的共享ptr不能保证存储空值,我不确定动态强制转换是否成功的正确定义测试是什么,我真的不太确定,但下面是: 在中声明(23.11.2.2.9共享\u ptr强制转换)
shared_ptr dynamic_pointer_cast(const shared_ptr&r)无异常代码>
返回:
(5.1)-当dynamic_cast(r.get())
返回非零
值p
,shared\u ptr(r,p)
否则,shared\u ptr()
共享\u ptr
的默认构造函数,在(20.11.3.11构造函数)中定义
作为职位条件
use\u count()==0&&get()==nullptr
我的理解是:如果原始指针转换返回nullptr
,则智能指针转换将保存nullptr
因此,我认为动态\u指针\u转换是成功的,如果生成的共享指针不包含空指针(成功时也可能包含空指针,但到目前为止,这在我的应用程序中并不相关)
<>但是我必须说这是我第一次进入C++标准,我也不明白,一个失败的动态CAST会如何保存一个非空的空指针,虽然我也读过了。 <代码>空共享dpTR不能保证存储一个空值< /c> >,但是如果它没有指向null,然后它应该指向一个有效的对象,然后该对象将是dynamic\u cast
<代码>演员阵容是否成功代码>它是try{…}catch(std::bad_cast)
@KamilCuk dynamic_pointer_cast不会抛出异常。哪里可以保证指向有效对象?
3-4) dynamic_cast<Y*>(r.get()) (If the result of the dynamic_cast is a null pointer value, the returned shared_ptr will be empty.)