2012-11-19 70 views
0

我不明白关于push_back的一些信息。
当我在对象上使用push_back时,是否使用对象的
复制构造函数复制其所有元素? (如果对象没有什么拷贝构造函数?)
在对象上使用push_back,C++

另一个问题:

vector<Course*> cs; 
Course* c = new CScourse(); //CScourse inherits Course 
cs.push_back(c); 

如果我使用

delete c; 

它会删除什么,我只是推入载体?

+1

是的。当你尝试访问那个指针时,你可以猜测...... – Mysticial

回答

2

是的每个对象都被复制到vector。如果vector必须增长,则每个元素都将被复制到新位置。在你的情况下,你正在存储指向Course的指针,所以只有指针被复制,实际的对象保持不变。

如果你delete c;,它确实会删除对象的c您在vector推指向。 vector仍然会包含指向c的对象的指针,但这被认为是悬挂指针。在删除之前,您通常会将其从vector中删除。

+0

我认为说'删除c'会删除被推入'vector'的对象是令人困惑的。 'Course'对象从未被推入'vector'中 - 唯一的东西就是指针。 –

+0

'delete c'将删除'c'指向的对象('Course')。 ''c'被推入'vector',我不明白你对'Course'被推向矢量的评论......这是一个'vector ',它本身无法保存'Course'。 – emartel

+0

这正是我所说的。你说“它确实会删除你在'vector'中推送的对象。” –