我在我的代码中遇到了这种奇怪的无指针情况,现在想知道是否有办法检测它(除了崩溃)。代码设法进入未构造对象的方法。构造b1时,a还没有构造,b尝试使用它。在构建 b2 时,a 已正确构建并且代码按预期工作。
除了显而易见的“不要在你的代码中这样做”之外,我想知道是否有办法在编译或运行时检测到这一点。编译器根本没有检测到它,我只是在程序崩溃时在初始化 DLL 时收到一些关于运行托管代码的晦涩且非常无用的消息。
我尝试测试“this”,但它不是 NULL,因为已分配内存——只是尚未调用构造函数,因此内存处于不确定状态。
我原以为编译器会插入一些调试代码来检测何时发生这种情况,但我想不会。
是否有任何断言或测试或编译时开关我可以用来检测这种情况,或者它只是归结为,“如果它伤害,不要这样做?”
OUTPUT:
(NULL)
test
#include "stdafx.h"
#include "cstring"
class Apple
{
char *sometimesinitialized;
public:
Apple () {
sometimesinitialized = new char[15];
strcpy_s(sometimesinitialized, 5, "test");
};
void test()
{
printf("%s\n", sometimesinitialized);
}
};
class Ball
{
public:
Ball();
};
Ball b1; // OOPS!
Apple a;
Ball b2; // Works as expected
Ball::Ball()
{
a.test();
}
int _tmain(int argc, _TCHAR* argv[])
{
scanf_s("%i");
return 0;
}