Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ itk::SmartPointer的指针强制转换?_C++_Casting_Smart Pointers_Reference Counting_Itk - Fatal编程技术网

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我编辑了我的问题。