这里是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;
这里,您通过无效的指针间接访问成员。该程序的行为是不确定的。
b是否被正确删除?
我没有相反的证据。
此代码是否应返回139错误?
我不知道139错误是什么,但是不,C ++不保证会返回此类错误。当行为未定义时,没有任何保证。