首页 > 解决方案 > 为什么字符串向量的 unique_ptr 的 push_back 失败?

问题描述

下面的代码存在分段错误。当不涉及 unique_ptr 时,一切正常。

#include <iostream>

int main() {
  auto vect = std::unique_ptr<std::vector<std::string>>();

  vect->push_back("abc");  // Segmentation Fault.
  vect->emplace_back("abc");  // Segmentation Fault.

  return 0;
}

在这种情况下,我在 Ubunutu 上使用 g++ 10.2 进行编译。

标签: c++c++11unique-ptr

解决方案


您需要unique_ptr按如下方式初始化您的实例:

using type = std::vector<std::string>;
auto vect = std::make_unique<type>();

vect->push_back("abc");     // No segfaults now
vect->emplace_back("abc");  // No segfaults now either

std::cout << vect->at(0) << std::endl;

推荐阅读