SDw*_*rfs 5 c++ stdvector language-lawyer
我想知道 std::vector 的范围构造函数是否复制数据,或者只是引用它?
看看这个例子:
vector<int> getVector() {
int arr[10];
for(int i=0; i<10; ++i) arr[i] = i;
return vector<int>(arr, arr+10);
}
Run Code Online (Sandbox Code Playgroud)
这会导致错误(由于分发了对稍后被销毁的堆栈的引用)还是可以,因为它复制了构造函数中的数据?
为了澄清:我正在寻找或多或少的官方资源来指出构造函数的以下哪些伪代码实现是有效的。我知道构造函数的签名是不同的......但是,你应该明白。
版本A(仅在内部使用给定的数据)
template<typename T>
class vector {
private:
T* data;
int size;
public:
vector<T>(T* start, T* end) {
data = start;
size = (end - start);
}
};
Run Code Online (Sandbox Code Playgroud)
版本 B(显式复制数据)
template<typename T>
class vector {
private:
T* data;
int size;
public:
vector<T>(T* start, T* end) {
for(T* it = start; it < end; ++it) push_back(*it);
}
};
Run Code Online (Sandbox Code Playgroud)
例如,该向量不能被定义为参考向量std::vector<int &>。所以代码是有效的。该向量不包含对数组元素的引用。它创建该类型的新元素int(作为向量的模板参数)而不是引用向量。
| 归档时间: |
|
| 查看次数: |
1915 次 |
| 最近记录: |