首页 > 解决方案 > C++ 双向类关联(使用前向声明)

问题描述

这里对 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 错误吗?

主文件

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

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

delete b;

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

谢谢 !

标签: c++forward-declaration

解决方案


delete b;

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

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

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

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

b 是否被正确删除?

我没有看到相反的证据。

此代码不应该返回 139 错误吗?

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


推荐阅读