Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 单例类指针赋值不';行不通_C++_Singleton - Fatal编程技术网

C++ 单例类指针赋值不';行不通

C++ 单例类指针赋值不';行不通,c++,singleton,C++,Singleton,我有一个ABC类,它是singleton(这是C++) 当我这样做的时候 ABC *b = ABC::getInstance(); ABC* a; a=b; 然后,当我签入调试器时,b的值没有分配给a 在调试器中,a的值显示为0x00000000,ABC成员的所有垃圾值(VS 2008调试器) 我在debugger watch(调试器监视)窗口中执行了a*b,我看到了有效值,当执行a*a时,我看到了所有空值和垃圾值(这是在上述过程结束之后)a和b都是指针 他们所指的地址将是相同的,尽管他们的具

我有一个ABC类,它是singleton(这是C++) 当我这样做的时候

ABC *b = ABC::getInstance();
ABC* a;
a=b;
然后,当我签入调试器时,b的值没有分配给a

在调试器中,a的值显示为0x00000000,ABC成员的所有垃圾值(VS 2008调试器)


我在debugger watch(调试器监视)窗口中执行了a*b,我看到了有效值,当执行a*a时,我看到了所有空值和垃圾值(这是在上述过程结束之后)

a
b
都是指针

他们所指的地址将是相同的,尽管他们的具体地址会有所不同


另一个原因可能是您正在以发布模式进行调试,并且之后没有使用变量
a
。在这种情况下,编译器可以决定省略
a

的声明和赋值,您确定调试器执行了语句
a=b

调试器中当前突出显示的行尚未执行。因此,将控件移动到下一行并再次检查值

这听起来可能很愚蠢,但这是我现在唯一能思考的原因

另一个原因,摘自吕基安·格里戈尔的回答:

另一个原因可能是您正在以发布模式进行调试,并且之后没有使用变量a。在这种情况下,编译器可以决定省略a的声明和赋值


当您执行
std::时会发生什么?我看不出有什么错误吗?调试器到底显示了什么?你试过打印地址了吗?代码应该可以正常工作(如果
getInstance()
没有抛出任何异常)。指针的“特定地址”是什么?你是说他们的地址,
&a
&b
?是的,但我没有得到他们相同的地址…那么解决办法是什么呢?@seahorse为他们,还是从他们那里有区别。@thiton我是说
&a
&b
。这只是一个猜测。。。发布的代码应该可以正常工作。@seahorse如果是这种情况,请发布更多代码,并告诉我们您如何知道它们不指向相同的内容。请尝试在语句
a=b
之后分配一个字符串,然后检查是否正确分配了字符串。如果是,请再次检查
a
的值。+1询问用户在哪里测试该值。我立即想到的是“断点是在
a=b
行上,还是在它之后?”。