c++ - 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;
谢谢 !
解决方案
delete b;
一旦你 delete b
,它(以及任何其他指向同一个对象的引用/指针/迭代器)变得无效。
通过无效指针间接访问成员的行为是未定义的。
std::cout << b->name << std::endl;
在这里,您通过一个无效的指针间接访问一个成员。程序的行为是未定义的。
b 是否被正确删除?
我没有看到相反的证据。
此代码不应该返回 139 错误吗?
我不知道 139 错误是什么,但不,C++ 不保证返回此类错误。当行为未定义时,没有任何保证。
推荐阅读
- ios - 无法在 Xcode 8.2.1 中分配“AASquaresLoading”类型的值
- javascript - 使用多行时 Json 解析的问题
- javascript - a+= b 在 array.map() Javascript 中没有给出正确的“a”结果
- java - 如何使用文件位置枚举多模块 Gradle 项目中的所有模块?
- oracle - 如何使用 Hibernate 将我的唯一键与有效的 null 内部值匹配?
- android-studio - 新创建的守护进程具有与预期不同的上下文。Java之家是不同的。更改 Java 主页
- python - 返回 np.array 或浮点数的 Numpy 点积
- node.js - 获取客户端计算机的公共 SSH 密钥
- xml - 从 Spring XML Config 文件中的不同子项目加载 sql 脚本
- pagination - 分页小部件:从编辑或显示返回列表视图时始终位于第 1 页