不能长疙瘩

Cannot make pimpl

我尝试制作粉刺图案:

//header
#include <memory>

class Table
{
public:
    Table();

private:
    class Impl;
    std::unique_ptr<Impl> *m_impl;
};
//source
#include <vector>
#include "table.hpp"

struct Table::Impl {
    Impl();
};

Table::Table()
    : m_impl { std::make_unique<Impl>() }
{

}

但是我得到一个错误:

table.cpp:9: error: cannot convert 'brace-enclosed initializer list' to 'std::unique_ptr*' in initialization : m_impl { std::make_unique() }

我不明白我做错了什么以及如何改正。

您的 m_impl 是指向 unique_ptr 的指针。

改变

std::unique_ptr<Impl> *m_impl;

std::unique_ptr<Impl> m_impl;