EnumaElish_
咕快快
采纳率100%
2020-03-25 21:58

学习c++中遇到的问题,求大佬解答

已采纳
#include <iostream>
class Singleton{
private:
    static Singleton* s_Instance;
public:
    static Singleton& Get(){
        return *s_Instance;
    }
    void Hello() {
        std::cout << "Hello" << std::endl;
    }
};
Singleton* Singleton::s_Instance = nullptr;

int main(){
    Singleton::Get().Hello();
    std::cin.get();
}

首先将Singleton类中的静态指针s_Instance设置为空指针,然后在main函数中直接调用Singleton::Get()用来这个指针指向内存的引用。**我的问题是:**
1. 已经被设置为空指针的内存单元应该是不存在的,那么也就无法获取到这个内存单元的引用,但是这段代码居然能够顺利被编译运行,求大佬讲解内部原理
2. 我在调试时发现这个运行从始至终s_Instance的值都是0,也就是空指针,这又是怎么回事呢。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • GKatHere GKatHere 1年前

    hello内部未用于类指针,相当于静态函数,所以能够运行。
    s_Instance一直都是空指针,没错。

    点赞 评论 复制链接分享
  • qq_40946921 Italink 1年前

    楼上说的对,因为hello函数没有访问过成员数据【变量/函数】,因此不需要this指针,可以直接调用

    点赞 评论 复制链接分享