Класс уничтожается прежде, чем нужно. Как правильно его закрепить?

295
31 июля 2017, 13:41

Класс уничтожается прежде, чем нужно. Как правильно его закрепить в памяти? Занести его объект в какой либо список?

Answer 1

Без примера кода сложно сказать в чем же ваша проблема. Попробую включить телепатию. Вероятно вы делаете что-то вроде:

void foo(){
    MyClass object;
    //...
}

И object уничтожается при выходе из foo.
В данном случае object это стековый объект, который живет ровно до конца текущей области видимости. Если вас не устраивает такое время жизни, то объект нужно создавать в куче и уничтожать вручную:

MyClass *object;
void foo(){
    object = new MyClass;
    //...
}
void bar(){
    delete object;
    object = 0; //для порядка
}

Однако вам следует быть осторожным, если вы забудете удалить объект, или потеряете указатель на него, то это приведет к утечке памяти.
Немного облегчить жизнь вам могут умные указатели. Например так:

std::unique_ptr<MyClass> object;
void foo(){
    object.reset(new MyClass); //Старый объект удален, новый создан
    //...
}
void bar(){
    object.reset(0); //Старый объект удален
}

Есть еще вариант, когда объект самоуничтожается выполняя delete this;. Однако с этой конструкцией все так просто как может показаться на первый взгляд. Это тема для отдельного вопроса

Answer 2

Каково должно быть время жизни этого класса? Если все время работы программы - сделайте его глобальным.

А вообще странный дизайн - поток внутри объекта класса. Логичнее объект класса в потоке создать и работать с ним.

Ну, а выкрутиться - передайте в поток копию и работайте с ней. Если просто копировать нельзя - создавайте свой объект динамически, оберните в shared_ptr (если с объектом нужно работать еще и в основной программе) или в unique_ptr, который потом передайте в поток...

READ ALSO
Что же такое ссылки? [дубликат]

Что же такое ссылки? [дубликат]

На данный вопрос уже ответили:

283
функция replace_copy_if

функция replace_copy_if

Необходимо считать файл и заменить все символы кириллицы на пробелы, затем полученный результат вывести на экранчто нужно передать в качестве...

402
cmake проблема со сборкой

cmake проблема со сборкой

Собрался настроить сборку у себя на компьютере скачал последний cmake 39

308
Форк криптовалюты BoolBerry(XBB)

Форк криптовалюты BoolBerry(XBB)

Прошу знающих помочь с созданием форка криптовалюты созданной на c++Криптовалюта называется BoolBerry(XBB), проблема следящая: Не могу запустить...

359