vector<int>()创建对象还是指针?与new vector<int>()的区别疑问
回答你的C++ vector对象/指针疑问
你完全说对了!vector<int>()创建的是一个临时的std::vector<int>对象,不是指针——这也是这段代码能正常编译的关键原因,你的判断非常准确。
我来帮你理清vector<int>()和new vector<int>()的核心区别:
vector<int>():这是直接调用vector的默认构造函数,创建一个完整的vector实例。这个对象会以临时对象的形式存在,类型是std::vector<int>,完全符合result.push_back()的参数要求(push_back需要接收一个vector<int>类型的值或者引用)。new vector<int>():这个表达式会在堆内存上分配一个vector对象,然后返回指向这个对象的指针(类型是std::vector<int>*)。如果你把这个指针传给push_back,编译器会直接报错,因为push_back不接受指针类型的参数——这也反过来证明了你的代码里必须传对象才行。
再结合你给出的代码片段看:
vector<vector<int>> result; if (level > result.size()) result.push_back(vector<int>());
当level大于result的元素数量时,我们用vector<int>()创建一个空的vector临时对象,push_back会把这个临时对象的内容(这里是空的)拷贝(或者在C++11及以后是移动)到result的末尾,完成后这个临时对象就会被自动销毁,完全符合预期逻辑。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

