请各位看下这段代码怎么写

突发奇想,想搞个用来创建单例对象的对象创建类,但是写出来是错的,找不到函数,麻烦大佬瞧瞧该怎么写。

#ifndef __LAZY__SINGLETON__OBJECT__CREATER__
#define __LAZY__SINGLETON__OBJECT__CREATER__

#include <mutex>

// 懒汉单例创建对象
template <typename T>
class LazySingletonObjectCreater {
  private:
    // 构造函数私有
    LazySingletonObjectCreater();
    // 锁
    static std::mutex mutex;
    // 该对象创建器的实例化对象
    static LazySingletonObjectCreater<T>* objectCreaterPoint;
    // 创建的对象指针
    static T* objectPointer;

    class DeleteObject {
      public:
        ~DeleteObject() {
            if (objectCreaterPoint != nullptr) {
                delete objectCreaterPoint;
                objectCreaterPoint = nullptr;
            }
            if (objectPointer != nullptr) {
                delete objectPointer;
                objectPointer = nullptr;
            }
        }
    };
    //静态变量会在程序结束时调用它的析构函数
    static DeleteObject del;

  public:
    // 该对象创建器的实例化方法
    static LazySingletonObjectCreater<T>* instance() {
        if (objectCreaterPoint == nullptr) {
            mutex.lock();
            if (objectCreaterPoint == nullptr) objectCreaterPoint = new LazySingletonObjectCreater();
            mutex.unlock();
        }
        return objectCreaterPoint;
    }

    // 获取创建的对象
    static T* getObject() {
        if (objectPointer == nullptr) {
            mutex.lock();
            if (objectPointer == nullptr) objectPointer = new T();
            mutex.unlock();
        }
        return objectPointer;
    }
};

#endif

报错信息:(编译器是MinGW8.1.0)
img

在c++17之前, 类里面的 static 成员变量需要在 .cpp 文件里做一下定义.
不然就会出现你图中的 "未定义的引用" 类型的错误.

如果使用c++17标准进行编译, 可以使用 inline 关键字来简化代码, 例如

// c++17 代码
#include <mutex>
class Object {
// ...
private:
    inline static std::mutex mutex{};
};