gpt4 book ai didi

c++ - 无法理解该程序的输出

转载 作者:行者123 更新时间:2023-11-27 23:43:55 25 4
gpt4 key购买 nike

#include <iostream>
using namespace std;

class A{
private : static A *ob;
public : static A* fun1();

public : void show(string str){
cout<<"This is :- "<<str<<endl;
}
};

A* A::ob=NULL;

A* A::fun1(){
if(ob==NULL){
ob=new A();
return ob;
}
return NULL;
}


int main() {
A *ob1 = A::fun1();
A *ob2 = A::fun1();

ob1->show("A"); // line 1

ob2->show("B"); //line 2

return 0;
}

输出是:-

This is :- A
This is :- B

尽管我只期望“This is :- A”,因为“ob2”为 NULL 并且取消引用它应该会出错。

谁能解释输出结果?

最佳答案

取消引用 NULL 是未定义的行为 ( Why dereferencing a null pointer is undefined behaviour? ),因此通过 NULL 调用非静态成员函数也是如此: When does invoking a member function on a null instance result in undefined behavior?

这意味着您不能依赖任何行为,即使是崩溃。在许多平台上这会崩溃,但您描述的输出同样有效。

关于c++ - 无法理解该程序的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52349357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com