【发布时间】:2021-06-23 21:51:26
【问题描述】:
以下代码存在分段错误。当不涉及 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 进行编译。
【问题讨论】:
-
你创建了一个empty
unique_ptr! (行尾的()是 unique_ptr` 的默认构造函数 - 不是保持向量的构造函数。)将一些东西 放入 它,例如,一个空的向量(来自堆)。 (“空”表示空:它没有指向任何东西。) -
你为什么要首先在堆上创建
std::vector(或std::string)? -
好吧,@gph,如果 C++ 编译器在 C++ 程序员遗漏了一些明显的事情时发出警告 - 好吧,它肯定会让 C++ 编译器编写者忙于思考它们!有很多简单的方法可以让自己上吊(还有更困难的方法......)......这就是为什么它是如此有趣和令人兴奋的语言!
标签: c++ c++11 unique-ptr