【发布时间】:2014-01-06 14:11:19
【问题描述】:
我刚刚阅读了this post on SO,它讨论了 STL 向量在内存中的存储位置。根据接受的答案,
vector<int> temp;
栈上向量的头信息,堆上的内容。
那么,下面的代码会出错吗?
vector<int> some_function() {
vector<int> some_vector;
some_vector.push_back(10);
some_vector.push_back(20);
return some_vector;
}
我应该改用vector<int> *some_vector = new vector<int> 吗?上面的代码会导致一些内存分配问题的代码吗?如果我使用自定义类的实例而不是 int,这种情况会改变吗?
【问题讨论】:
-
some_function中的代码很好,可以正常工作。它将复制(使用复制构造函数)some_vector的内容到接收向量中。 -
你的函数很好,避免使用动态分配的内存,除非它真的需要并且你知道你在做什么。
-
@JoachimPileborg:实际上,我认为它会将向量移动。不会吗?
-
@yzt 在 C++11 编译器中,是的,它可能会。
-
通过复制返回向量会更慢,对吧?我的意思是它必须将所有内容复制到接收向量中。如果您担心速度,请将向量移动到池中并返回指向它的指针。