C++ 执行函数时导致崩溃的变量

C++ 执行函数时导致崩溃的变量,c++,class,C++,Class,我正在构建一个dll代码,但是一些变量正在崩溃 我创建了一个实例来调用另一个文件中的函数 main.h #include <Windows.h> #include <iomanip> class MyClass { public: using Pointer = std::unique_ptr<MyClass>; bool enable; MyClass(); ~MyClass(); void MyFunc()

我正在构建一个dll代码,但是一些变量正在崩溃

我创建了一个实例来调用另一个文件中的函数

main.h

#include <Windows.h>
#include <iomanip>

class MyClass {
public:

    using Pointer = std::unique_ptr<MyClass>;

    bool enable;

    MyClass();
    ~MyClass();

    void MyFunc();
};
p类h

#include "main.h"

class MyClass2 {
public:
    MyClass2();

    MyClass &cl() const;
private:
    MyClass::Pointer CClass;
};
pclass.cpp

#include "pch.h"

#include <windows.h>
#include "pclass.h"


MyClass2::MyClass2() : CClass() {}

MyClass& MyClass2::cl() const {
    return *CClass;
}
instance.cpp

#include "pch.h"

#include <windows.h>
#include "instance.h"

MyIntance::MyIntance() : inst_check() {}


MyClass2 &MyIntance::ini() {
    return inst_check;
}
我不知道它为什么会崩溃

如果我删除
enable
变量并只保留
MessageBoxA
该函数将正常运行

错误图像


您正在访问一个空指针。从
MyIntance::Instance().ini()
返回的对
inst\u check
的引用是一个默认构造的对象,如果我们查看
MyClass2
s默认构造函数,您拥有
CClass()
,这意味着
std::unique\u ptr
是默认构造的,这意味着它等于
nullptr
。你需要的是

MyClass2::MyClass2() : CClass(make_unique<MyClass>()) {}
MyClass2::MyClass2():CClass(make_unique()){

因此,有一个实际的
MyClass
对象指向
CClass

您正在访问一个空指针。从
MyIntance::Instance().ini()
返回的对
inst\u check
的引用是一个默认构造的对象,如果我们查看
MyClass2
s默认构造函数,您拥有
CClass()
,这意味着
std::unique\u ptr
是默认构造的,这意味着它等于
nullptr
。你需要的是

MyClass2::MyClass2() : CClass(make_unique<MyClass>()) {}
MyClass2::MyClass2():CClass(make_unique()){

因此,有一个实际的
MyClass
对象指向
CClass

我认为您从未创建过
MyClass
的实例。我有:
MyClass::Pointer类但从不创建实例。我认为您从未创建过
MyClass
的实例。我有:
MyClass::Pointer类但从不创建实例。我是C++新手,我一直使用C、php。。我注意到有些事情非常不同,谢谢你告诉我我的错误在哪里was@robertsobrel没问题。如果你还没有,我建议你买一个。C++有很多细微之处,很难学。我是C++新手,我一直用C,PHP,…我注意到有些事情非常不同,谢谢你告诉我我的错误在哪里was@robertsobrel没问题。如果你还没有,我建议你买一个。C++有很多细微之处,它们很难学。
#include "pch.h"
#include "instance.h"

    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
                         )
    {
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH:
            MyIntance::Instance().ini().cl().MyFunc();
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
        }
        return TRUE;
    }
MyClass2::MyClass2() : CClass(make_unique<MyClass>()) {}