Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> наследование от heap only класса, А что, если что? 
:(
    Опции темы
BearFear
Дата 6.2.2013, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2012

Репутация: нет
Всего: нет



Собственно интересует модель поведения. Есть класс который хип онли. Производный класс обладающий так же конструктором и деструктором, он будет наполовину (та часть что как бы оверхед родителю) стековым и наполовину (та часть от которой наследуемся) динамическим?  smile 
Иными словами, есть ли необходимость дописывать свойства хип онли (прятать конструкторы и деструктор) классу который наследуется от хип оноли?

Это сообщение отредактировал(а) BearFear - 6.2.2013, 19:33
PM MAIL   Вверх
bsa
Дата 6.2.2013, 20:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



BearFear, что за бред? Где ты таких терминов нахватался? Объект размещается полностью в куче, только когда ты делаешь new ClassName. Если ты создал локальный объект, то в стеке размещается как минимум указатель на область в куче.

Классы, которые хранят данные в куче, ничем не отличаются от тех, что хранят данные в себе.

PM   Вверх
BearFear
Дата 6.2.2013, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2012

Репутация: нет
Всего: нет



В состоянии экстаза я вместо вопроса выдал нелепое предположение. Сорюшки!
Код

class ClassA {
public:
    static ClassA *create_instance() {
        return new ClassA;
    }
    
    void delete_instance() {
        delete this;
    }
    
protected:
        ClassA() {
            //// какие то космические действия
        }
        ClassA(const ClassA& Object);
        ~ClassA() {
            //// очистка вселеной от снусмумриков
        }
};

class ClassB : public ClassA {
public:
        ClassB() {
            //// какие то космические действия
        }
        ~ClassB() {
            //// очистка вселеной от снусмумриков
        }
};

int main(int argc, char **argv) {
    ClassB Bs; // Что творится здесь? Хипонли превращается в стековый!?
    ClassA *Ad = ClassB::create_instance(); // допустимо тока так, здесь КлассБ выделяет нам динамический КлассА
    return 0;
}


Уопрос: как выглядит наследование от хипонли с тем условием что и дочерний класс так же должен быть хипонли?
PM MAIL   Вверх
bsa
Дата 6.2.2013, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Если ClassB у тебя наследник, то делаешь в нем свой статический create_instance и все.
PM   Вверх
BearFear
  Дата 6.2.2013, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2012

Репутация: нет
Всего: нет



Хм Работает. Ща... не-ну я же зачем то задал вопрос видимо я просто потерял нить. Черт возьми, не может быть все так просто. Мне надо как то оправдать сложность вопроса, что бы не прослыть глупцом.
PM MAIL   Вверх
bsa
Дата 6.2.2013, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Не ищи сложностей, там где их нет.
PM   Вверх
BearFear
Дата 6.2.2013, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2012

Репутация: нет
Всего: нет



Черт возьми, я примерно недели две назад столкнулся с проблемой, записал ее на бумаге. Понадеялся на свою память и только счас понял что я забыл ваще о чем была речь. Бумажка потерялась в серых рабочих буднях не относящихся к С++. Написал вопрос на автомате, сгенерировав тему за 0,0036 секунды. Видать старею мозг окисляется у меня с каждым днем все больше.

Это сообщение отредактировал(а) BearFear - 6.2.2013, 22:24
PM MAIL   Вверх
BearFear
Дата 6.2.2013, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2012

Репутация: нет
Всего: нет



Нашел! Я хотел сделать так:
Есть класс и вся его сущность должна являться оверхедом для родителя. То есть, я сделал такую фишку как:
- класс-родитель являющийся неким средством позволяющим легко управлять режимностью класса и от него надо наследоваться и использовать в дочернем классе методы определенные временем ранее в суперклассе 
- класс управления состоянием так же есть в двух экземплярах, это хипонли и без хипонли

Проблема возникла в том, что наследник не имел возможности создаваться хипонли лишь будучи наследником суперкласса. Вот собственно и вопрос: как сделать наследника хипонли без дописывания методов.
На чистом языке это сделать нереально. Тут же ниже мелким шрифтом написал пометку, что можно использовать препроцессор. Наверно это будет самым подходящим методом экономящим время. Достаточно написать в теле класса какую то штуку на подобии HEAPONLY_HEADER(class_name), который подставит все необходимые и похожие между собой (для хипонли классов). Возможность определения конструкторов и деструктора так же можно заложить в разнообразии препроцессорных дефайнов  smile  не, ну а чо, если есть препроцессор, почему бы его не использовать? Сори за ложную тревогу.

Добавлено через 49 секунд
А хотя ваще не... услышать мнение народа на этот счет тоже интересно. Так что все кто готов протестовать, буду рад услышать. Возможно и переключимся на инновации.
PM MAIL   Вверх
mes
Дата 6.2.2013, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



BearFear,   smile 


--------------------
PM MAIL WWW   Вверх
bsa
Дата 7.2.2013, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



mes, я с тобой согласен.
BearFear, ты сэкономишь уйму времени, если вместо объяснения "что тебе нужно" ты попытаешься объяснить "зачем это нужно".
PM   Вверх
BearFear
Дата 9.2.2013, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2012

Репутация: нет
Всего: нет



Объяснять что нужно было бы целесообразным в той ситуации когда предусматривались бы аналоги. А здесь как бы все просто. Нужно это для того, что бы будущие классы могли бы быть хипонли smile Для того, что бы унаследовавшись от класса, можно было бы унаследовать хипонли-принцип.

Это сообщение отредактировал(а) BearFear - 9.2.2013, 19:36
PM MAIL   Вверх
NoviceF
Дата 9.2.2013, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: 2
Всего: 2



BearFear, Посмотри "Наиболее эффективное использование C++" Мейерса, правило 27. "В зависимости от ситуации требуйте или запрещайте размещать объекты в куче". Там и вопрос наследования подобных классов рассматривается, правда не уверен, что в той плоскости, что тебе нужна.
 
PM MAIL   Вверх
BearFear
Дата 9.2.2013, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2012

Репутация: нет
Всего: нет



Вся фишка в том что действительно требуется хипонли для той иерархии которая может быть. Все дело в том, что delete стековых объектов приведет к очень дурным последствиям. Ввиду этого, необходима соответствующая "ответственность" за объект. В случае с хипонли, ответственный объект или механизм не будет обманут и сможет своевременно удалить все то чем владеет.
NoviceF, спасибо за наводку, попробую поискать.
PM MAIL   Вверх
korian
Дата 9.2.2013, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 2
Всего: 17



Цитата(BearFear @  9.2.2013,  20:19 Найти цитируемый пост)
Вся фишка в том что действительно требуется хипонли для той иерархии которая может быть.

Я как-то не вижу случаев, для чего это нужно. Конечно, это скорее всего нужно, в каких-то очень редких ситуациях, для конкретных классов. Но не думаю, что проблема написать продуцирующую функцию для конкретного одного-двух классов.

Цитата(BearFear @  9.2.2013,  20:19 Найти цитируемый пост)
Все дело в том, что delete стековых объектов приведет к очень дурным последствиям.

Есть всякие unique_ptr, shared_ptr и тд. Зачем вообще использовать delete? Опять же случаи могут и быть, но на столько редкие, что я никогда с ними не сталкивался.

PM   Вверх
BearFear
Дата 9.2.2013, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2012

Репутация: нет
Всего: нет



Ну вот например, такая ситуация. У нас есть некий профиль предоставляющий определенные возможности. Этот профиль - класс. Реализация профиля - это когда есть всяческие механизмы и подчиненные классы. Иными словами, класс профиля предоставляет нам возможности, а реализация возможностей состоит из всяких там классов, структур, методов класса профиля (ну пусть это будет ГЛАВНЫЙ класс профиля, (специально не пишу интерфейс, дабы не вертелись в голове паттерны)) и прочего. Когда мы просим метод профиля что то сделать, метод профиля создает динамический объект. Но, этот же класс позволяет передавать подчиненные объекты между собой. А следовательно, любопытный кодер может по неаккуратности взять и передать по указателю стековый объект. При удалении объекта владеющего подчиненным удалится стековый объект через delete. Если использовать метод объекта удаляющий его, то все более безопасно. Разновидность таких объектов может быть бесконечной, создавать копипастой методы для хипонли - противоООП методика.

Это сообщение отредактировал(а) BearFear - 9.2.2013, 21:57
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0949 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.