crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

5 страниц V  « < 2 3 4 5 >  
Ответить в данную темуНачать новую тему
> C++, виртуальный деструктор
kwisp
  опции профиля:
сообщение 18.8.2010, 13:41
Сообщение #31


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Алексей1153,
хитрец ты вызываешь не чисто виртуальную функцию а переорпеделенную.
рассмотри пример у меня в посте выше и вывод на консоль.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 18.8.2010, 13:41
Сообщение #32


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


Цитата(Алексей1153 @ 18.8.2010, 13:20) *
что тут верить то :) Проверить, и всё

код собирается без ошибок.
а в конце 10.4 (Abstract Classes) написано:
Цитата
Member functions can be called from a constructor (or destructor) of an abstract class; the effect of making a
virtual call (10.3) to a pure virtual function directly or indirectly for the object being created (or destroyed)
from such a constructor (or destructor) is undefined.

в таких случаях лучше реализовывать чисто виртуальную функцию:
class A {
public:
    virtual void foo() = 0;
};

void A::foo()
{
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 18.8.2010, 13:57
Сообщение #33


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(kwisp @ 18.8.2010, 16:41) *
хитрец ты вызываешь не чисто виртуальную функцию а переорпеделенную.

прошагай отладчиком - никакой хитрости :) Или я просто не понял, что ты имел в виду под "вызов чистых виртуальных функций". Ведь в классе A - это и есть есть чистая :)

Сообщение отредактировал Алексей1153 - 18.8.2010, 13:58
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 18.8.2010, 14:02
Сообщение #34


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


Цитата(Алексей1153 @ 18.8.2010, 14:57) *
Или я просто не понял, что ты имел в виду под "вызов чистых виртуальных функций".

struct A {
virtual void foo() = 0;
};

struct B : public A {

void foo()
{
    A::foo(); // <-
}

};


Сообщение отредактировал DEADHUNT - 18.8.2010, 14:03
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 18.8.2010, 15:03
Сообщение #35


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(Litkevich Yuriy @ 17.8.2010, 15:57) *
Может кто-нибудь объяснить, как может влиять создание руками виртуального деструктора, при условии, что его тело пустое?

я уже писала: никак не влияет. просто лишний вызов или перераспределение кода при очередной компиляции скрывает ошибку потоков или затирания памяти.
от пустого деструктора абсолютно ничего не прибавляется, виртуальный он или не виртуальный.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 18.8.2010, 19:12
Сообщение #36


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


DEADHUNT, понятно )

А я то понял, что про именно из A вызов говорилось

Сообщение отредактировал Алексей1153 - 18.8.2010, 19:13
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.8.2010, 8:51
Сообщение #37


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


вобщем шутки RunTime продолжаются.

Похоже, что чуваки утверждавшие, что qmake - для простеньких приложений, правы. И видимо я дорос до более сложного приложения.

Прога падает при некоторых изменениях в исходнике. падает в самых неожиданных местах. Попытка добавить qDebug в выше стоящие по иерархии модули решает проблему (т.к. эти модули перекомпилируются).
Проделал такой эксперимент. При возникновении проблем, в один из вышестоящих модулей добавляю пустую строку - это вызывает перекомпиляцию. И теперь прога работает стабильно.

Не уж-то на CMake придётся переходить? Так не охота что-то изучать на середине проекта.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 19.8.2010, 12:43
Сообщение #38


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Litkevich Yuriy, а у тебя нигде директива не используется такая?
#pragma pack


upd
(всё, вопрос неактуален )) Внимательнее прочитал пост Юрия и понял, что это ни при чём)

Сообщение отредактировал Алексей1153 - 19.8.2010, 12:44
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 19.8.2010, 14:23
Сообщение #39


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


Цитата(Litkevich Yuriy @ 19.8.2010, 9:51) *
Не уж-то на CMake придётся переходить? Так не охота что-то изучать на середине проекта.

а все вызовы дополнительных утилит(moc, uic, etc.) в ручную прописывать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 19.8.2010, 14:25
Сообщение #40


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(DEADHUNT @ 19.8.2010, 15:23) *
а все вызовы дополнительных утилит(moc, uic, etc.) в ручную прописывать?

Зачем? CMake это все умеет и даже намного больше. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

5 страниц V  « < 2 3 4 5 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 15:48