包括一个将std :: unique_ptr <t>作为字段的类,而&#34; T&#34;是不完整的类型

时间:2017-04-05 11:04:25

标签: c++ c++11 unique-ptr pimpl-idiom incomplete-type

我为std::unique<B>创建了一个小型测试用例,其类型为B

Test.h

#pragma once
#include <memory>
class B;   //<--- compile error here
class Test{
    std::unique_ptr<B> bPtr;   
    //#1 need to move destructor's implementation to .cpp
    public: ~Test();
};

Test.cpp的

#include "Test.h"
class B{};
Test::~Test(){}  //move here because it need complete type of B

的main.cpp

#include <iostream>
#include "Test.h"
using namespace std;
int main(){
   Test test;
   return 0;
}

我收到了这个错误: -

  

/ usr / include / c ++ / 4.8.2 / bits / unique_ptr.h:65:22:错误:无效   应用&#39; sizeof&#39;到不完整的类型&#39; B&#39;

据我了解,编译器告诉我B是一个不完整的类型(在main.cpp中),因此它无法正确删除B

但是,在我的设计中,我希望main.cpp 具有完整类型的B
非常粗略地说,这是一个pimpl。

有一个好的解决方法吗?

以下是一些类似的问题,但没有一个提出干净的解决方法。

std::unique_ptr不是正确的工具吗? 我应该创建自己的unique_ptr吗?我可以使用#3作为指南。

修改

Kerrek SB 几乎解决了代码中的所有问题。非常感谢!

剩下的问题是: -
我应该创建自己的unique_ptr来删除此限制吗? 可能吗? - 我想这是可能的,我现在正在尝试编码。

0 个答案:

没有答案