gpt4 book ai didi

c++ - dynamic_pointer_cast 意外行为

转载 作者:行者123 更新时间:2023-11-27 22:52:23 25 4
gpt4 key购买 nike

我正在构建一个工厂类,我需要在其中返回一个 unique_ptrBaseClass .返回的指针由 DerivedClass 组成使用 make_shared 转换为共享指针的对象然后转换成想要的BaseClass指针为:

#include "BaseClass.h"
#include "DerivedClass.h"

std::unique_ptr<BaseClass> WorkerClass::DoSomething()
{

DerivedClass derived;

// Convert object to shared pointer
auto pre = std::make_shared<DerivedClass>(derived);

// Convert ptr type to returned type
auto ret = std::dynamic_pointer_cast<BaseClass>(ptr);

// Return the pointer
return std::move(ret);
}

我在 std::move 上遇到这个编译器错误

error C2664: 'std::unique_ptr<_Ty>::unique_ptr(std::nullptr_t) throw()' : cannot convert parameter 1 from 'std::shared_ptr<_Ty>' to 'std::nullptr_t'
1> with
1> [
1> _Ty=rfidaccess::BaseClass
1> ]
1> nullptr can only be converted to pointer or handle types
1>c:\project\dev\traansite1r\traansite1rcommon\tag.cpp(261): error C2664: 'std::unique_ptr<_Ty>::unique_ptr(std::nullptr_t) throw()' : cannot convert parameter 1 from 'std::shared_ptr<_Ty>' to 'std::nullptr_t'
1> with
1> [
1> _Ty=rfidaccess::BaseClass
1> ]
1> nullptr can only be converted to pointer or handle types
1>c:\project\dev\traansite1r\traansite1rcommon\tag.cpp(337): error C2664: 'std::unique_ptr<_Ty>::unique_ptr(std::nullptr_t) throw()' : cannot convert parameter 1 from 'rfidaccess::AARLocomotiveBaseClass' to 'std::nullptr_t'
1> with
1> [
1> _Ty=rfidaccess::BaseClass
1> ]
1> nullptr can only be converted to pointer or handle types
1>c:\project\dev\traansite1r\traansite1rcommon\tag.cpp(393): error C2664: 'std::unique_ptr<_Ty>::unique_ptr(std::nullptr_t) throw()' : cannot convert parameter 1 from 'rfidaccess::AAREndOfTrainBaseClass' to 'std::nullptr_t'
1> with
1> [
1> _Ty=rfidaccess::BaseClass
1> ]
1> nullptr can only be converted to pointer or handle types

我正在使用 VS2012...

为什么它使用不同于声明的东西 (std::unique_ptr<BaseClass>)?

dynamic_pointer_cast不返回 std::unique_ptr<BaseClass>退役?

帮助了解发生了什么。

最佳答案

std::shared_ptr 不可转换为 unique_ptr

在您的情况下,您只需要以下内容:

std::unique_ptr<BaseClass> WorkerClass::DoSomething()
return std::make_unique<DerivedClass>(/*args*/);
}

关于c++ - dynamic_pointer_cast 意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36137608/

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