在结构实例的向量上丢失指针,在结构中带有指针

loosing pointers on vector of struct instances, with pointers in the struct

本文关键字:指针 结构 实例 向量      更新时间:2023-10-16

不确定标题是否正确,但这里是:

例如,如果我有以下结构:

struct strA{
    int x;
    strA(int x);
}
strA::strA(int x){
    this->x = x;
}

另一个使用指向前一个的指针的结构:

#include strA
struct strB{
    int y;
    strA *var_strA;
    strB(int y);
    ~strB(){
        delete var_strA;
    }
};
strB::strB(int y){
    this->y = y;
    var_strA = new strA(123);
}

然后,如果我从主要应用程序执行strB项的向量:

std::vector<strB> vectB;
main(){
    strB *itemB = new strB(456);
    vectB.push_back(*itemB);
    delete itemB;
    //more code
}

如果我尝试访问矢量中项目的var_strA,则为空。而且,通过删除矢量上的项目时,我会收到错误,因为析构函数尝试再次删除var_strA。

从爪哇来...我真的迷失在该死的指针上。

提前致谢

您需要一个复制构造函数和该指针保持类型的复制赋值运算符,即遵循三规则。这里有一个关于SO的好资源:什么是三法则?