Assertion failed: !hook.is_linked() в Boost

168
18 августа 2021, 16:10

Не могу понять из-за чего выскакивает исключение "Assertion failed: !hook.is_linked(), file d:\boost_1_71_0\boost_1_71_0\boost\intrusive\detail\generic_hook.hpp" . Прошу помощи, так как сам не очень разбираюсь в осях и тем более в библиотеке Boost.

вот основной код:

#include "pch.h"
#include "boost/intrusive/list.hpp"
#include<iostream>
using namespace boost::intrusive;
class MyClass : public list_base_hook<>
{
    int int_;
public:
    list_member_hook<> member_hook_;
    MyClass(int i = 0) : int_(i) {}
};
void func(list<MyClass>* list) {
    MyClass mc(1);
    list->push_back(mc);
}
int main()
{
    list<MyClass> list;
    func(&list);
}
Answer 1

Вся идея intrusive list заключается в том, что список "сцепляет" друг с другом непосредственно предоставленные вами объекты. Список не владеет этими объектами, а лишь ссылается на них. Список никак не может контролировать время жизни этих объектов. Обеспечение того, что время жизни этих объектов будет не короче времени жизни самого списка - ваша обязанность. Если вы вдруг уничтожите хотя бы один из объектов, на который в этот момент ссылается такой список, то список разрушится.

Вы поместили в список локальный объект mc, который сразу же после этого был уничтожен (при выходе из функции). Все. Ваш список "сломался". Об этом вам и говорит данный assertion.

READ ALSO
Выравнивание содержимого в блоке

Выравнивание содержимого в блоке

Есть несколько блоков div с display:inline-block; в них по картинке

176
Ошибка при сохранении docx файла

Ошибка при сохранении docx файла

ЗдравияДелаю простой редактор docx файлов (только текст)

222
Все запросы возвращают 404 not found

Все запросы возвращают 404 not found

Пытаюсь настроить aspnet mvc + angularjs приложение

118