CHMOD0777 2024-01-17 21:38 采纳率: 0%
浏览 13

C++使用内联变量结合智能指针实现单例模式

C++使用内联变量结合智能指针实现单例模式时遇到这样的问题,有哪位高人知道为啥吗?

#include <iostream>
#include <memory>
#pragma warning(disable : 4996)

class MyClass
{
public:

    ~MyClass()
    {

    }
    MyClass()
    {

    }

private:
    static inline  std::shared_ptr<MyClass> ptr{new MyClass };// error C2027: use of undefined type 'MyClass'
};

然而这样写就没有问题:

#include <iostream>
#include <memory>
#pragma warning(disable : 4996)

class MyClass
{
public:

    ~MyClass()
    {

    }
    MyClass()
    {

    }

private:
    static inline  std::shared_ptr<MyClass> ptr{ std::make_shared<MyClass>()};
};
  • 写回答

3条回答 默认 最新

  • flower980323 2024-01-18 10:28
    关注

    这里跟C++17和内联都没啥关系
    在类定义完之前不能使用不完整的类类型,只能使用指针或引用

    img

    new MyClass的时候,MyClass还没有定义完,编译器不知道他占多大存储空间,所以识别就报错了
    std::make_shared使用MyClass的时候只是作为模板参数类型,识别能通过,类似于图里的S作为智能指针的参数类型

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 1月17日