gpt4 book ai didi

C++ 双向类关联(使用前向声明)

转载 作者:行者123 更新时间:2023-11-27 22:33:10 25 4
gpt4 key购买 nike

这里是 C++ 的新手,我正在尝试在两个类之间创建双向一对多关联。

这是我到目前为止所取得的成就:

class_a.h

#ifndef CLASS_A_H
#define CLASS_A_H

class ClassB;
class ClassA {
public:
std::vector<ClassB *> Bs;
};

#endif

class_b.h

#ifndef CLASS_B_H
#define CLASS_B_H

class ClassA;
class ClassB {
public:
ClassA *classA;
std::string name;
};

#endif

但是,当测试以下代码时,输​​出显示的是test

b 是否被正确删除?这段代码不应该返回 139 错误吗?

main.cpp

auto *a = new ClassA();
auto *b = new ClassB();

b->classA = a;
b->name = "test";

delete b;

std::cout << b->name << std::endl;

谢谢!

最佳答案

delete b;

一旦删除 b,它(以及指向同一对象的任何其他引用/指针/迭代器)将变得无效。

通过无效指针间接访问成员的行为是未定义的。

std::cout << b->name << std::endl;

在这里,您通过无效指针间接访问成员。程序的行为未定义。

Is b being deleted correctly ?

我没有看到相反的证据。

Should not this code returns a 139 error ?

我不知道 139 错误是什么,但不是,C++ 不保证返回此类错误。当行为未定义时,没有任何保证。

关于C++ 双向类关联(使用前向声明),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58404000/

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