我有一个用于分配的测试应用程序,我必须将共享指针 push_back 到共享指针 vector 中。但是它在 push_back 上崩溃了,我不确定为什么。
我尝试移动 shared_ptr 而不是将其复制到 vector ,但我仍然遇到同样的问题。我试图调试这个问题,但由于某种原因,在我单击变量后,变量没有显示在调试器中(可能是 IDE 问题)。我确实在堆栈溢出上看到了类似的问题,但这不是同一个问题,因为在调用 push_back 之前正在初始化共享指针。
//Fill - will loop through and ask the user what elements to add
void fill(std::vector<std::shared_ptr<Test>> &vec, int num)
{
for(int i {1}; i <= num; i++)
{
std::cout << "Enter data pointer [" << i << "] : ";
int data {};
std::cin >> data;
std::shared_ptr<Test> data_ptr = std::make_shared<Test> (data);
std::cout << "Created shared pointer for " << data_ptr->get_data() <<
std::endl; //debug
vec.push_back(std::move(data_ptr));
std::cout << "Added to vector" << data_ptr->get_data() << std::endl;
//debug (crash issue is with the pushback method)
}
}
创建 shared_ptr 后 push_back 方法似乎没有执行时程序崩溃。我添加了 cout 调试消息来尝试查看该函数中程序失败的位置。调用“created shared ptr”,但不调用“Added to vector”。
最佳答案
当您从 shared_ptr
移动时,移动自变量无效(在本例中为 null)。
在推送之前调用 data_ptr->get_data()
,这很好。但是在你按下(通过移动)调用 data_ptr->get_data()
之后,第二次将使用(现在移动的)智能指针 - 因此你的崩溃。
关于c++ - 对智能指针 vector 使用 push_back 方法时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57618718/