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++……