[您有Animal
和Dog
两个类(其中Dog
继承自Animal
),并且您遇到的情况是您经常期待动物但正在发送狗的实例。在我的特定情况下,我经常将强指针(std::shared_ptr<Dog>
)转换为期望动物的函数(std::shared_ptr<Animal>
)。
[如果我们接受可以将函数参数作为引用的方法(std::shared_ptr<Animal>&
,请避免使用参数,因为担心更改线程的所有权,为什么不应该将强指针作为引用参数),我认为我们将是安全的内存-明智地使用std::shared_ptr<Dog> dog
投射reinterpret_cast<std::shared_ptr<Animal>&>(dog)
,对吧?
如果是这样,除了线程问题之外还会发生什么;例如参考计数品种?
明确地说,我们的目的是要有一个在很多情况下都可以使用的解决方案,在这种情况下,强制转换并不是一个切实可行的解决方案。更为重要的是,必须铸造许多对象。另外,忽略std::unique_ptr
可能是更好的解决方案,也可能不是。
[添加最后的要求-使用普通指针不允许我在虚拟的通用序列化程序类函数的情况下更改原始std::shared_ptr
,因此无法将其作为模板。
您有动物和狗两个类(其中,狗从动物继承而来),并且您经常遇到期待动物但要发送狗实例的情况。在我的特定情况下,我...
[我经常将强力指针(
std::shared_ptr<Dog>
)指向期望动物的功能(std::shared_ptr<Animal>
)。
由于无法直接使用static_cast
上的const_cast
,dynamic_cast
,reinterpret_cast
和std::shared_ptr
来检索与作为参数传递的指针std::static_pointer_cast
,std::const_pointer_cast
共享所有权的指针,应使用std::dynamic_pointer_cast
和std::reinterpret_pointer_cast
功能。