Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 失去结构实例向量上的指针,指针位于结构中_C++ - Fatal编程技术网

C++ 失去结构实例向量上的指针,指针位于结构中

C++ 失去结构实例向量上的指针,指针位于结构中,c++,C++,不确定标题是否正确,但这里是: 例如,如果我有以下结构: 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;

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

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

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
}
std::vectorvectb;
main(){
strB*项目B=新的strB(456);
vectB.推回(*itemB);
删除项目b;
//更多代码
}
如果我尝试访问向量中项目的var_strA,则为空。而且,当删除向量上的项时,我得到了一个错误,因为析构函数再次尝试删除var_strA

从Java提交。。。我真的被那些该死的指针弄丢了


提前感谢

对于该指针保持类型,即follow,您需要一个复制构造函数和一个复制赋值运算符。这里有一个很好的资源:

你是说
删除itemB
而不是
删除strB
?为什么var\u strA甚至是一个指针?为什么itemB甚至是一个指针?想想看。Java强制您动态创建对象。Java强制使用额外级别的间接寻址w.r.t.对象。C++没有。你需要学会欣赏这一点。此外,获得一个或多个体面的C++书籍。为了学习和使用C++,你应该忘记你所知道的关于java的一切。相信我。是的,没有必要让var_strA成为指针,但是如果itemB不是指针,我如何使用构造函数创建新对象?因为STRB ITEMB =新的STRB(…)不需要考虑,已经知道了,并且还检查了一本我收集的灰尘的老C++……