为什么make_unique不能与具有内联构造函数的类一起使用?

时间:2018-09-06 03:25:06

标签: c++11 smart-pointers

我有一个定义明确的类,

class A
    {
    public:
        A();
        A(int a);
        A(const A& o);
        A(A&& o);
        ~A();
        A& operator=(const A& o);
        A& operator=(A&& o);
    private:
        int a = 0;
    };

首先,所有方法都在.h文件中。然后,我使用了VS的重构功能,并将所有这些方法移到了.cpp文件中(这为我节省了很多工作。) enter image description here

所有自动移动的方法前面都有一个内联关键字,

inline A::A()
    {
        cout << "A constructor\n";
    }

我知道内联关键字,所以我认为可以。

然后我在第三个源文件(.cpp文件)中使用了此类。

void test()
    {
        std::unique_ptr< A> a = std::make_unique<A>();

    }

当我编译项目时,它给我一个错误LNK2019在make_unique中发生了。

然后我删除了所有内联关键字,它起作用了。 我不知道为什么当类的构造函数为内联时make_unique不起作用。

1 个答案:

答案 0 :(得分:0)

我认为这是一个unique_ptr问题。我刚刚测试过,它是将内联函数移至.cpp文件的问题。

.cpp文件中有一个内联构造函数。仅创建一个类实例将失败。

<YourTenantName>.b2clogin.com
  

严重性代码描述项目文件行抑制状态   错误LNK2019无法解析的外部符号“ public:__thiscall   __AWellDefinedClass :: A :: A(void)”(?? 0A @__ AWellDefinedClass @@ QAE @ XZ)在函数“ void __cdecl __pointerTest :: test(void)”中引用   (?test @__ pointerTest @@ YAXXZ)ForTest D:\ test \ ForTest \ ForTest \ pointerTest.obj 1