【问题标题】:Unique/Smart Pointer Vector in c++c ++中的唯一/智能指针向量
【发布时间】:2021-01-03 14:36:05
【问题描述】:

我正在练习使用智能指针(在 C++ 中)。我真的被一个问题困住了:

我需要对这种表示进行编码,通常一个框表示智能指针,箭头指向堆变量。 在这个问题中,盒子是在一起的,因此它代表了一个智能指针向量。 我已经尝试了几件事,但似乎没有任何效果。 到目前为止,这是我尝试的:

unique_ptr<vector<unique_ptr<char>>> ptr_vec;
ptr_vec -> push_back(make_unique<char>('w'));

如果我运行它只是说我的程序停止工作
如果我进行调试,我会得到这个(它打开文件 vector.tcc 并向我展示了这个):

但是我无法为 unique_ptr 分配地址

【问题讨论】:

  • 请显示您尝试过的代码和遇到的错误。
  • 你有一个指向向量的指针。创建向量并使指针指向它的部分在哪里?您是否知道指针指向其他事物并且您必须实际创建事物才能使用它?
  • 你有一个(唯一的)指针指向一个(唯一的)指针向量。这在实践中没有多大意义。为什么不只是一个指针向量?
  • 根据图表,您根本不需要向量,因为它的元素存储在堆上。如果您想将它们存储在堆栈中,std::array&lt;std::uniqe_ptr&lt;char&gt;, 9&gt; 似乎更适合
  • 谢谢我现在明白了!!我将取出我的第一个 unique_ptr!

标签: c++ pointers vector stack heap-memory


【解决方案1】:

unique_ptr 的实例最初没有任何价值;需要先初始化:

unique_ptr<vector<unique_ptr<char>>> ptr_vec;
ptr_vec = make_unique<vector<unique_ptr<char>>>();

否则ptr_vec-&gt;push_back() 将访问一个空指针,程序将崩溃,并出现如您所观察到的分段错误。

但是这里不需要指向向量的指针,std::vector&lt;std::unique_ptr&lt;char&gt;&gt; 就足够了:

#include <memory>
#include <vector>

int main() {
    std::vector<std::unique_ptr<char>> vec;
    vec.push_back(std::make_unique<char>('w'));
    vec.push_back(std::make_unique<char>('-'));
    vec.push_back(std::unique_ptr<char>());
    vec.push_back(std::make_unique<char>('*'));
    // . . .
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2019-12-05
    • 2016-10-09
    • 2020-05-29
    • 2021-09-20
    相关资源
    最近更新 更多