微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

循环依赖和unique_ptr

如何解决循环依赖和unique_ptr

我有以下代码

Handler.h

class FwdClass;

class Handler {
 public:
  virtual std::unique_ptr<FwdClass> getFwdClass() noexcept {
    return nullptr;
  }
  virtual ~Handler() {
  }
};

DerivedHandler.h

#include "Handler.h"

class DerivedHandler: public Handler {
 explicit DerivedHandler() { // error here
 }
  std::unique_ptr<FwdClass> getFwdClass () noexcept override {
    return std::unique_ptr<FwdClass>(std::move(p));
  }
 std::unique_ptr<FwdClass> p;
}

我看到以下编译错误

**error:** invalid application of 'sizeof' to an incomplete type 'FwdClass'
        static_assert(sizeof(_Tp)>0,and also:
note: in instantiation of member function 'std::default_delete<FwdClass>::operator()' requested here
          get_deleter()(std::move(__ptr));

如何解决这些问题?我试图用定义的getFwdClass /认析构函数并包含FwdClass.h来制作DerivedHandler.cpp文件,但这无济于事。

(更多详细信息)

FwdClass.cpp实现包含DerivedHandler.h,所以我不能包含FwdClass标头DerivedHandler.h,因为它导致循环依赖。这就是为什么我要进行前向声明和接口类Handler.h。前向声明适用于原始ptrs,但不适用于唯一的ptrs。

我不认为这是一个重复的问题,特别是没有循环依赖的细微差别。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。