我读了下面这段代码。
vector<vector<int>> result;
//level is an integer.
if (level > result.size())
result.push_back(vector<int>());
我想知道:vector<int>()
创建了什么,一个对象还是一个向量指针?
我认为它应该是一个向量对象,而不是向量的指针。否则,它将无法编译。
但是,我觉得vector<int>()
和new vector<int>()
很相似。
也许我错过了什么?
如果你能指出我遗漏的知识点,我将非常感激。
非常感谢!
发布于 2018-05-04 04:30:34
这两种情况都是相似的,因为它们提供了一个真实的、诚实的对象。不同之处在于你访问它的方式和它的寿命。
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。
https://stackoverflow.com/questions/50163029
复制相似问题