我阅读了以下代码片段。
vector<vector<int>> result;
//level is an integer.
if (level > result.size())
result.push_back(vector<int>());
我在想:
什么是vector<int>()
创建一个对象还是 vector 指针?
我觉得应该是vector对象,而不是vector的指针。否则,它不会编译。
但是,我觉得vector<int>()
类似于 new vector<int>()
.
也许我错过了什么?
如果您能指出我遗漏的知识点,我将不胜感激。
非常感谢!
最佳答案
这两种情况的相似之处在于它们都提供了一个真实的、对上帝诚实的对象。不同之处在于您访问它的方式和它的生命周期。
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 .
关于c++ - 将一个新 vector 推回一个 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50163029/