SUNLITON类误用,C++解释-需要 我刚刚发现C++中不可能的东西,我正在学习它。

SUNLITON类误用,C++解释-需要 我刚刚发现C++中不可能的东西,我正在学习它。,c++,C++,我在没有初始化classsingleton类对象或wtf happend的情况下调用了一个非静态函数,我没有抓住它,这是==NULL,我这样做的- 我的单例类示例: class LightsLogic { public: void LightsLogic::request_color_shift_group_after_x_msecs(blabla); int current_used_chase_list = 0; // ALL THE SINGLETON CLASS T

我在没有初始化classsingleton类对象或wtf happend的情况下调用了一个非静态函数,我没有抓住它,这是==NULL,我这样做的-

我的单例类示例:

class LightsLogic {

public:
    void LightsLogic::request_color_shift_group_after_x_msecs(blabla);

    int current_used_chase_list = 0;

// ALL THE SINGLETON CLASS THING BELOW
private:

    LightsLogic() {  // CONSTRUCTOR HERE !
    };

    LightsLogic(LightsLogic const&);    // Don't Implement. // SINGLETON
    void operator=(LightsLogic const&); // Don't implement // SINGLETON

public:

    static LightsLogic& getInstance()  // return reference. // SINGLETON
    {
        static LightsLogic instance;
        return instance;
    }

};
所以在我定义的某个地方:

static LightsLogic* logicofligths;
然后我从这个类中调用了方法

logicofligths->request_color_shift_group_after_x_msecs(blabla);
现在发生了什么-此方法使用变量:

void LightsLogic::request_color_shift_group_after_x_msecs(blabla) {
    current_used_chase_list; // i am doing something with this variable
   //but since this variable was defined and initialized in class header
   // and this == null, this method CANT acces this variable ?! but it thinks it can ?!
   //we do get a crash saying: First-chance exception at 0x013F5E8B in myexe.exe: 0xC0000005: Access violation reading location 0x00028D48.

  // and if we would use this check before accesing the variable :
if (this == NULL) {
report("this is null");
return;
}
//this would prevent the crash.

}
现在,在不破坏singleton类的情况下访问该类的方法的正确方法是:

(&LightsLogic::getInstance())->request_color_shift_group_after_x_msecs(blabla);
//i know i could just use LightsLogic::getInstance(). but that im using for accesing variables, more clear for me and compiler should fix this misery on compile ?!
为什么我能这样做,我做错了什么?或者这不是我做错了什么,我只是误用了一些记忆,得到了“未定义的行为”?因为那是我的第一个想法


有趣的是,如果我不使用该方法的类头中定义的变量,应用程序就可以工作。

通过nullpointer调用具有未定义的行为


任何事都有可能发生,也可能什么事都不会发生。

你不认为任何事都不能定义任何事吗?所以,只要使用静态光,逻辑光;我上错课了?为什么它让我这么做|无法限制指针上允许的操作。指针的值,即使已知,也不被认为是wrt。汇编但是,如果您提高了警告级别,编译器可以对此发出警告。我想试试。