首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在具有不完整的转发声明类的头文件中声明智能指针?

如何在具有不完整的转发声明类的头文件中声明智能指针?
EN

Stack Overflow用户
提问于 2020-11-07 11:17:33
回答 1查看 356关注 0票数 1

然而,由于智能指针模板类型在声明时在技术上是不完整的,我得到了关于sizeof不能用于唯一指针的编译错误。我是否必须将实现标头拉入我的类的标头中,而不是向前声明它们,或者是否有额外的存根可以提供给我的向前声明,以满足智能指针?

例如,这是头文件:

代码语言:javascript
复制
#include <memory>

namespace N {
    class A;
    class Owner {
        std::unique_ptr<A> myMember;
    }
}

这是源文件:

代码语言:javascript
复制
#include "A.H"

class Owner{
    Owner() {
        myMember = std::make_unique<A>("arg1", "arg2");
    }
}

我不希望每个包含我的头的人都有依赖关系,这就是为什么当我使用原始指针时,这些类最初是向前声明的。

EN

回答 1

Stack Overflow用户

发布于 2020-11-07 12:09:53

如何在具有不完整的正向声明类的头文件中声明智能指针?

通过定义构造函数、析构函数和其他函数,这些函数依赖于标头外部和独立翻译单元内的所指向类的完整定义。

我是否必须将实现标头放入类的标头中

不是的。只有当您没有像我所描述的那样在类定义之外定义成员函数时,才需要这样做。

示例:

代码语言:javascript
复制
struct Owner {
    std::unique_ptr<A> myMember;

    Owner();
    ~Owner();
    Owner(Owner&&);
    Owner& operator=(Owner&&);
};

class A {};

Owner::Owner() = default;
Owner::~Owner() = default;
Owner::Owner(Owner&&) = default;
Owner& Owner::operator=(Owner&&) = default;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64724109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档