我有一些使用以下代码的故事:
#include <iostream>
#incldue <vector>
template <typename ElemType>
class A{
private:
std::vector<ElemType> data;
public:
A() {};
A(int capacity) {
data.reserve(capacity);
}
int GetCapacity() {
return data.capacity();
}
};
int main() {
A<int> a;
a = A<int>(5);
std::cout << a.GetCapacity() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
输出为0.可能是什么问题?
Dav*_*e S 11
复制构造函数和赋值运算符std::vector<T>不需要复制向量的容量,只复制元素.因为该行a = A<int>(5)间接调用赋值运算符(在创建临时值之后),所以向量in a没有容量.
尝试将main的前两行更改为just A<int> a(5),看看结果是什么.
如果您绝对需要将容量从一个实例传输到另一个实例的功能,则需要定义A的赋值和复制构造函数,以复制数据并分配容量.