矢量预分配无法正常工作

Peh*_*hat 4 c++ vector

我有一些使用以下代码的故事:

#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的赋值和复制构造函数,以复制数据并分配容量.