C++ itk::SmartPointer的指针强制转换?
我正在为C++ itk::SmartPointer的指针强制转换?,c++,casting,smart-pointers,reference-counting,itk,C++,Casting,Smart Pointers,Reference Counting,Itk,我正在为std::static\u pointer\u cast、std::const\u pointer\u cast、和std::dynamic\u pointer\u cast寻找类似的东西 我尝试了ITK的文档和ITK::SmartPointer的源代码,但没有找到任何有关智能指针转换的内容 在一个特定情况下,我需要向指针添加“constness”(将itk::SmartPointer转换为itk::SmartPointer),以便将其传递给第三方函数。传递原始指针是不可能的,因为一旦自
std::static\u pointer\u cast
、std::const\u pointer\u cast
、和std::dynamic\u pointer\u cast
寻找类似的东西
我尝试了ITK的文档和ITK::SmartPointer
的源代码,但没有找到任何有关智能指针转换的内容
在一个特定情况下,我需要向指针添加“constness”(将itk::SmartPointer
转换为itk::SmartPointer
),以便将其传递给第三方函数。传递原始指针是不可能的,因为一旦自动创建的const智能指针超出范围,数据将被删除
我发现的唯一相对安全的解决方案是:
static\u cast(itk\u smart\u pointer\u of\u t)
我不知道这种方法是线程安全的还是有其他可能的缺陷。此外,在dynamic\u cast
的情况下,事情会变得更加混乱
看起来奇怪的是,ITK没有本机的std::const\u pointer\u类型转换和其他类型转换;DR:
itk::SmartPointer
不需要强制转换指针,只需转换“原始”指针并重新包装它即可
ITK智能指针使用侵入式引用计数,这意味着拥有的对象必须提供引用计数器
itk::SmartPointer
只能与itk类一起使用,或者更准确地说,只能与具有Register()
和UnRegister()方法的类一起使用。例如,itk::LightObject
类的后代,根据文档
是大多数itk对象的最高级别基类。它实现了引用计数
因此,我假设
传递原始指针是不可能的,因为一旦自动创建的const智能指针超出范围,数据将被删除
不正确,因为临时itk::SmartPointer
只会增加然后减少拥有对象的引用计数器
这意味着可以安全地将“不太原始”指针传递给接受智能指针的函数,或者手动创建临时智能指针并将其传递给函数。您发现了什么?你试过什么?你打算用这些东西做什么?它们与ITK有什么关系?@JoachimPileborg我编辑了我的问题。