c++ - c++中的唯一/智能指针 vector

标签 c++ pointers vector stack heap-memory

我正在练习使用智能指针(在 C++ 中)。我真的被一个问题困住了:enter image description here
我需要对这种表示进行编码,通常一个框表示智能指针,箭头指向堆变量。
在这个问题中,盒子是在一起的,因此它代表了一个智能指针 vector 。
我已经尝试了几件事,但似乎没有任何效果。
这是我到目前为止所尝试的:

unique_ptr<vector<unique_ptr<char>>> ptr_vec;
ptr_vec -> push_back(make_unique<char>('w'));
如果我运行它只是说我的程序停止工作
如果我进行调试,我会得到这个(它打开文件 vector.tcc 并向我展示了这个):
enter image description here
但后来我无法为 unique_ptr 分配地址

最佳答案

unique_ptr 的一个实例最初没有值(value);它需要先初始化:

unique_ptr<vector<unique_ptr<char>>> ptr_vec;
ptr_vec = make_unique<vector<unique_ptr<char>>>();
否则 ptr_vec->push_back()将访问一个空指针,并且程序将像您观察到的那样因段错误而崩溃。
但是这里不需要指向 vector 的指针,只需 std::vector<std::unique_ptr<char>>足够:
#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>('*'));
    // . . .
}

关于c++ - c++中的唯一/智能指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63925521/

相关文章:

c++ - MFC DoModal 对话框

c++ - 尝试动态内存分配 C++

c++ - 使用 std::fill 初始化结构对象

c - 奇数 C 指针段错误

c - 在 C 中释放内存

c++ - std::stringstream 错误?

c++ - 内部源代码 - 在链接列表实现中插入后对元素使用删除会破坏整个应用程序

c++ - 存取错误的问题(下方附有程式码)

C++ 使用用户输入填充对象 vector

java - 遍历同步集合