C ,向量,指针和对象混乱
C++, vectors, pointers and objects confusion
我正在研究一个项目,作为我的大学系统编程课程的作业。我对指针,向量,堆栈和堆的问题感到非常困惑。
使用C 。我必须得到一个课程的对象向量,并且这些课程对象有几个不同的字段。我做的是:
vector<CoursesObject> coursevector;
然后我创建了我的课程对象类,其中包含当前剩余的空间和当然字段的名称。现在我想添加一个新课程,我做:
CoursesObject *theCourse = new CoursesObject(name, space);
现在我想将其添加到处理程序向量:
coursevector.push_back(*theCourse);
我知道,我在堆栈上创建了一个课程对象的向量,并为堆上的新课程做了一个新的指针,并添加到处理程序向量的指针指针指向课程对象的指针。堆。我说的是正确的吗?
当我尝试删除这些课程对象时,我会做:
for(int i=0; i<coursevector.size(); i++)
delete coursevector.at(i);
这给我一个错误,认为它不是指针。但是我不是在课程向量添加了一个指向课程对象的指针吗?
请有人解释,我必须正确处理记忆,看来我没有正确处理。
这个
vector<CoursesObject> coursevector;
是CourseObjects
的向量,因此它不能容纳CourseObject
指针。当您这样做时:
coursevector.push_back(*theCourse);
您将获得存储在向量中的theCourse
指向的CoursesObject
的副本。您无需从向量删除任何条目。实际上,您不能,因为它没有指针。
如果您只是避免了动态分配:
coursevector.push_back(CoursesObject(name, space));
您根本不需要使用新的。
//This vector stores CoursesObject objects,
//not pointers to CoursesObjects.
vector<CoursesObject> coursevector;
//Construct theCourse with automatic storage
//duration.
CoursesObject theCourse(name, space);
//Copy theCourse into coursevector
coursevector.push_back(theCourse);
//theCourse will be automatically destroyed.
//coursevector (and all the objects that it contains)
//will be automatically destroyed.
您的所有对象都没有动态分配,因此您无法在程序中的任何时间删除它们。请记住,一旦对象动态分配它们才能删除它们:
int Var1 = 0; //cannot be deleted, scope and life will exist for the life of program
int * Var2 = new int; //CAN be deleted, dynamically allocated.
delete Var2; //free memory
但是,您可以删除最后一个对象,这是指针。我会抓住向量的最后一个元素并在其上调用DELETE(这应该是您上课的指针)。
执行此操作时:
coursevector.push_back(*theCourse);
实际上,您正在删除指针,因此您正在添加对象的副本。您需要声明courseObject指针的向量:
vector<CoursesObject *> coursevector;
然后添加一个对象:
coursevector.push_back(theCourse);
现在,您的代码删除对象应该有效:
for(int i=0; i<coursevector.size(); i++)
delete coursevector.at(i);
coursevector
只能容纳 CoursesObject
s,而不能持有CoursesObject
s的指针,因此您不需要使用new
操作员(Check @Mankarse的答案)。但是,如果您仍然想持有指针,则将课程向量的定义更改为
vector<CoursesObject*> coursevector;
和push_back the the Pointer的值如下:
coursevector.push_back(theCourse);
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- C ,向量,指针和对象混乱
- C++返回临时对象混乱
- Cocos 2dx 人像模式对象位置混乱
- C++对象声明混乱