将新矢量推回矢量

时间:2018-05-03 20:03:12

标签: c++

我阅读了以下代码:

vector<vector<int>> result;
//level is an integer. 
if (level > result.size())
     result.push_back(vector<int>());

我想知道: vector<int>()创建什么,对象或向量指针?

我认为它应该是一个矢量对象,而不是矢量指针。否则,它就不会编译。

但是,我认为vector<int>()new vector<int>()类似。

也许我错过了什么?

如果你能指出我错过的知识点,我真的很感激。

非常感谢!

1 个答案:

答案 0 :(得分:4)

这两种情况都是相似的,因为它们提供了一个真实的,诚实的上帝对象。不同之处在于您访问它的方式以及它的使用时间。

vector<int>()使用Automatic storage duration在自动存储中创建对象。您可以将此对象视为可以在数字手中保留的对象,但只能暂时保留。如果没有相关的标识符goes out of scope并消失,则会在行尾删除。在销毁之前,它会被复制到result。使用标识符(例如vector<int> vec;),自动变量将持续到标识符到达其范围的末尾。

new vector<int>()使用Dynamic storage duration在动态存储中创建一个对象,并为您提供指向它的指针。这个对象就在某个地方,你所有的“拥有”是关于如何找到它的信息。在这种情况下夫妻问题。您已经注意到第一个,result将不接受指向vector的指针。它想要真实的东西。另一个问题是具有动态存储持续时间的对象会挂起,直到它们被delete手动销毁或流程结束。除非你有指向它的指针,否则内存会丢失,在没有系绳的情况下漂浮在空间中,你可以使用它来访问和删除它。

一般情况下,请避免使用new,除非您发现无法避免的情况之一,并且在这些情况下prefer a smart pointer