将unique_ptr <derived>传递给接受unique_ptr <base />参数的函数时出现编译器错误

时间:2016-11-16 10:57:43

标签: c++ android-studio

我有以下代码:

class A {

};

class B : public A {

};

class C {
    void func(std::unique_ptr<A> &&p) {

    }
    void init() {
        std::unique_ptr<B> b(new B);
        func(std::move(b));
    }
};

根据this,上述代码应该可以正常工作。显然,unique_ptr被设计为能够模仿内置指针的多态性。 VS2015上的编译器错误不显示,但Android Studio中确实显示

IntelliJ错误读取:“参数类型不匹配:类'std :: unique_ptr与类'std :: unique_ptr'不兼容” 当我尝试构建时,编译器错误读取:“错误:无法从'unique_ptr'转换为'unique_ptr'”。

我的Cmake文件中设置了以下标志(在Android Studio中构建本机库):

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")

Android Studio正在使用 GNU 4.9。

我应该注意到,在初始化时完成上传工作正常(即std :: unique_ptr a(new B);),但由于某种原因,当尝试作为参数传递时它不起作用(如似基于上面列出的链接可以接受。)

我知道我可以解决这个问题,但我不想牺牲代码的清晰度和安全性,因为编译器很糟糕。到目前为止,大部分STL在Android Studio中运行良好,但如果我想使用此功能,我可能只需在VS中独立构建库。

编辑:如果不清楚,我的问题具体是:为什么我在一个IDE中收到此错误,而在另一个IDE中没有?有没有办法让我在前者工作(所以我可以继续在那个环境中编码)?

编辑2:当我尝试使用 shared_ptr 执行完全相同的操作时(对于传递的派生和预期的基本参数),不会显示错误。怪异。

0 个答案:

没有答案