如果我有这样的功能:
int foo(std::vector<int>* integer1ArrayIn, * integer2ArrayIn) {
std::vector<int>& integer1Array = *integer1ArrayIn;
std::vector<int>& integer2Array = *integer2ArrayIn;
}
integer1Array
是否会调用复制构造函数/移动构造函数来复制传入参数的元素? 谢谢
答案 0 :(得分:2)
1)不,没有制作副本。您可以使用小型程序对其进行测试,例如this。
${platName.replaceAll("(\\p{Ll})(\\p{Lu})","$1 $2")}
2)小心#include <iostream>
struct foo
{
foo() { std::cout << "Constructor" << std::endl; }
foo(const foo&) { std::cout << "Copy constructor" << std::endl; }
foo& operator=(const foo&) { std::cout << "Copy assignment operator" << std::endl; }
};
int main() {
foo* A = new foo;
foo& B = *A;
delete A;
}
s!否则一切都很好。
3)从不(见AlexG的回答)
4)不确定“代码在内存中执行”的含义,因为代码未在内存中执行。如果你的意思是程序执行时内存会发生什么,那就是另一个故事
答案 1 :(得分:2)
dataloader
和integer1Array
)是指针或引用,它就永远不会调用复制/移动构造函数。如果你有integer2Array
,它会有效地制作副本。
您可以使用Jonas的答案来玩弄并亲眼看看:)