C++ 双向 class 关联(使用前向声明)
C++ Bi-directional class association (Using forward declaration)
这里是 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
是否被正确删除?此代码 returns 不应该是 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
,它(以及指向同一对象的任何其他 reference/pointer/iterator)将变得无效。
通过无效指针间接访问成员的行为未定义。
std::cout << b->name << std::endl;
在这里,您通过无效指针间接访问成员。程序的行为未定义。
Is b being deleted correctly ?
我没有看到相反的证据。
Should not this code returns a 139 error ?
我不知道 139 错误是什么,但不,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
是否被正确删除?此代码 returns 不应该是 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
,它(以及指向同一对象的任何其他 reference/pointer/iterator)将变得无效。
通过无效指针间接访问成员的行为未定义。
std::cout << b->name << std::endl;
在这里,您通过无效指针间接访问成员。程序的行为未定义。
Is b being deleted correctly ?
我没有看到相反的证据。
Should not this code returns a 139 error ?
我不知道 139 错误是什么,但不,C++ 不保证返回此类错误。当行为未定义时,没有任何保证。