gpt4 book ai didi

c++ - itk::SmartPointer 的指针转换?

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:57 24 4
gpt4 key购买 nike

我正在寻找类似 std::static_pointer_cast 的内容, std::const_pointer_cast , 和 std::dynamic_pointer_cast对于 std::shared_pointer .

我尝试了 ITK 的文档和 itk::SmartPointer的源代码,没有发现任何关于智能指针转换的信息。

在一种特殊情况下,我需要将“constness”添加到指针(将 itk::SmartPointer<T> 转换为 itk::SmartPointer<const T> )以便将其传递给第三方函数。传递原始指针是不可能的,因为一旦自动创建的 const 智能指针超出范围,数据将被删除。

我找到的唯一相对安全的解决方案:

static_cast<itk::SmartPointer<const T>>(itk_smart_pointer_of_t) .

我不知道这种方法是线程安全的还是有其他可能的陷阱。此外,在 dynamic_cast 的情况下事情会变得更加困惑。

ITK 没有原生的std::const_pointer_cast 似乎很奇怪-喜欢和其他 Actor 。

最佳答案

长话短说:itk::SmartPointer不需要指针转换,只需转换“原始”指针并重新包装它即可。


ITK 智能指针使用侵入式引用计数,这意味着拥有的对象必须提供引用计数器。

itk::SmartPointer只能与 ITK 类一起使用,或者更准确地说,与具有 Register() 的类一起使用和 UnRegister()方法。例如,itk::LightObject 的后代类,根据文档,

is the highest level base class for most itk objects. It implements reference counting ...

因此,我的假设是

Passing a raw pointer is out of the question because data will be deleted once the automatically created const smart pointer goes out of scope.

不正确,因为临时 itk::SmartPointer只会增加然后减少拥有对象的引用计数器。

这意味着将“非原始”指针传递给接受智能指针的函数或手动创建临时智能指针并将其传递给函数是安全的。

关于c++ - itk::SmartPointer 的指针转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27016173/

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