我阅读了以下代码:
vector<vector<int>> result;
//level is an integer.
if (level > result.size())
result.push_back(vector<int>());
我想知道:
vector<int>()
创建什么,对象或向量指针?
我认为它应该是一个矢量对象,而不是矢量指针。否则,它就不会编译。
但是,我认为vector<int>()
与new vector<int>()
类似。
也许我错过了什么?
如果你能指出我错过的知识点,我真的很感激。
非常感谢!
答案 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。