gpt4 book ai didi

c++ - 有没有办法在调用方法之前断言对象是否已正确构造?

转载 作者:太空宇宙 更新时间:2023-11-04 15:24:27 24 4
gpt4 key购买 nike

我在我的代码中遇到了这种奇怪的无指针情况,现在我想知道是否有办法检测它(除了崩溃)。代码设法进入未构造对象的方法。 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;
}

最佳答案

如果 B 的实例需要访问 A 的实例,那么它应该传递给 B 的构造函数。

struct B {
B(A &a) {
a.test();
}
};


A a;
B b(a);

关于c++ - 有没有办法在调用方法之前断言对象是否已正确构造?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12209675/

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