I have tried the following, but getting segmentation fault and "double free detected in tcache2" during runtime:
class A {
...
};
class B {
public:
B(...) {...}
~B() {
for(int i=0;i<As.size();i++) {
if(As[i] != nullptr) {
delete As[i];
As[i] = nullptr;
}
}
}
std::vector<A*> As;
};
int main()
{
A* a1 = new A(...);
A* a2 = new A(...);
B* b1 = new B(...);
b* b2 = new B(...);
b1.As.push_back(a1);
b1.As.push_back(a2);
b2.As.push_back(a1);
delete b1;
delete b2;
return 0;
}
Is there any way I could assure that I delete these pointers only once?