假设我创建了两个向量,一个在堆上,一个在栈上:
Vector<int> vector1;
Vector<int>* vector2 = new Vector<int>;
我将vector1
传递给两个函数,例如foo1(Vector<int>)
和foo2(Vector<int>&)
。我还将vector2
传递给foo3(Vector<int>*)
。
由于我对C++还不熟悉,这里的行为差异让我感到困惑。
我可以说
foo1
会复制整个vector1
,而foo2
只会传递对vector1
的引用吗?但是,声明在堆栈上的
vector1
不应该无法从其他任何地方(即foo2
内部)访问,除非它是在创建它的作用域内吗?此外,在
foo1
和foo2
中修改vector1
的内容会影响原始向量吗?vector1
会在其作用域结束时自动销毁,还是我们需要手动删除它?
new
。改用make_unique
和make_shared
。否则就像 Matteo 所写的那样。 - nwpmake_shared
来自C++11,make_unique
原本应该是C++11的一部分,但被遗忘了,现在它属于C++14。它让C++变得更好,以至于人们感觉"它就像是一门新语言"。 - nwp