Unique/Smart C++ 中的指针向量
Unique/Smart Pointer Vector in c++
我正在练习使用智能指针(在 C++ 中)。我真的被一个问题困住了:
我需要对这种表示进行编码,其中通常一个方框表示智能指针,而箭头指向一个堆变量。
在这个问题中,盒子是在一起的,因此它代表了一个智能指针向量。
我尝试了几件事,但似乎没有任何效果。
到目前为止,这是我的尝试:
unique_ptr<vector<unique_ptr<char>>> ptr_vec;
ptr_vec -> push_back(make_unique<char>('w'));
如果我运行它只是说我的程序停止工作
如果我进入调试,我会得到这个(它打开文件 vector.tcc 并向我展示这个):
但是我无法将地址分配给 unique_ptr
unique_ptr
的实例最初没有任何价值;需要先初始化:
unique_ptr<vector<unique_ptr<char>>> ptr_vec;
ptr_vec = make_unique<vector<unique_ptr<char>>>();
否则 ptr_vec->push_back()
将访问一个空指针,并且程序将像您观察到的那样因分段错误而崩溃。
但是这里不需要指向向量的指针,只需 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++ 中)。我真的被一个问题困住了:
我需要对这种表示进行编码,其中通常一个方框表示智能指针,而箭头指向一个堆变量。 在这个问题中,盒子是在一起的,因此它代表了一个智能指针向量。 我尝试了几件事,但似乎没有任何效果。 到目前为止,这是我的尝试:
unique_ptr<vector<unique_ptr<char>>> ptr_vec;
ptr_vec -> push_back(make_unique<char>('w'));
如果我运行它只是说我的程序停止工作
如果我进入调试,我会得到这个(它打开文件 vector.tcc 并向我展示这个):
但是我无法将地址分配给 unique_ptr
unique_ptr
的实例最初没有任何价值;需要先初始化:
unique_ptr<vector<unique_ptr<char>>> ptr_vec;
ptr_vec = make_unique<vector<unique_ptr<char>>>();
否则 ptr_vec->push_back()
将访问一个空指针,并且程序将像您观察到的那样因分段错误而崩溃。
但是这里不需要指向向量的指针,只需 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>('*'));
// . . .
}