Тема: Вопрос знатокам с++

Ответить в теме
Страница 2 из 2 ПерваяПервая 1 2
Показано с 21 по 31 из 31
  1. Вверх #21
    User banned
    Пол
    Мужской
    Сообщений
    4,167
    Репутация
    1059
    Цитата Сообщение от DiMomite Посмотреть сообщение
    Как я понял сложность как раз в создании дочернего элемента по имени класса в рантайме и состоит.

    В джаве это возможно благодаря рефлексии. Коллеги говорят что в C# как в джаве нельзя.
    Код:
    Assembly asm = Assembly.GetExecutingAssembly();
    Type t = asm.GetType("className");
    dynamic instance = Activator.CreateInstance(t);
    Цитата Сообщение от Ull9 Посмотреть сообщение
    обьявив деструктор базового класса чисто виртуальным. вы вводите memory leak.
    если вы удаляете обьект используя указатель на базовый класс. у вас происходит потеря памяти.

    нет? я давно кодил в С++.
    Все как раз наоборот


  2. Вверх #22
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    Я под удобством понимаю быстроту и эффективность решения современных типовых задач.
    а вот эти вещи почти всегда взаимоисключающие.
    видел я прототип инфотеймент на авто. написан на яве. после включения система думает около 20 секунд прежде чем слышны первые звуки из динамика.

    написали быстро. это да.
    потом все пришлось выбросить и писать на С.

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

  3. Вверх #23
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    Цитата Сообщение от Reflector Посмотреть сообщение
    Все как раз наоборот
    не понял, поясни.
    индивидуальная субстанция разумной природы

  4. Вверх #24
    User banned
    Пол
    Мужской
    Сообщений
    4,167
    Репутация
    1059
    Цитата Сообщение от Ull9 Посмотреть сообщение
    не понял, поясни.
    Код:
    class A
    {
    public:
        virtual ~A() {}
    };
    
    class B : public A
    {
        ~B() { cout << "~B()"; }
    };
    
    A* b = new B;
    delete b;
    Если ты уберешь virtual, то деструктор производного класса вызван не будет, следовательно и память выделенная конструктором B не будет освобождена...

  5. Вверх #25
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    я говорил о чисто виртуальном деструкторе!!!
    обьявив деструктор базового класса чисто виртуальным
    а ты мне что своим примером изобразил?
    индивидуальная субстанция разумной природы

  6. Вверх #26
    User banned
    Пол
    Мужской
    Сообщений
    4,167
    Репутация
    1059
    Цитата Сообщение от Ull9 Посмотреть сообщение
    я говорил о чисто виртуальном деструкторе!!!
    а ты мне что своим примером изобразил?
    Эээ... Хорошо, переделаем как ты хотел:
    Код:
    class A
    {
    public:
        virtual ~A() = 0;
    };
    
    A::~A() {}
    
    class B : public A
    {
        ~B() { cout << "~B()"; }
    };
    
    A* b = new B;
    delete b;
    Что поменялось? Для того чтобы вообще скомпилировать код с чисто виртуальным деструктором нужно объявить его тело(A::~A() {}) и тогда он ничем не будет отличаться от просто виртуального деструктора, потому если не было никаких утечек в моем предыдущем коде, то не будет и в этом. Разница в том, что класс A стал "абстрактным" и его экземпляр я создать напрямую не могу, о чем DiMomite тебе и говорил, но какое это имеет отношение к утечкам? Никакого

  7. Вверх #27
    User banned
    Пол
    Мужской
    Сообщений
    2,401
    Репутация
    1159
    Цитата Сообщение от Ull9 Посмотреть сообщение
    а вот эти вещи почти всегда взаимоисключающие.
    видел я прототип инфотеймент на авто. написан на яве. после включения система думает около 20 секунд прежде чем слышны первые звуки из динамика.

    написали быстро. это да.
    потом все пришлось выбросить и писать на С.

    к теме. судя по постановке задачи это какой то кривой дизайн. имхо
    Про ваш пример, напрашивается ваша же цитата: "это какой то кривой дизайн. имхо".
    Воздержусь от подробностей, дабы не слишком препятствовать ТС выискивать скудные сообщения по теме, в его топике

  8. Вверх #28
    Модератор
    Мистер Одесский Форум
    Аватар для maxx™
    Пол
    Мужской
    Адрес
    Одеса
    Возраст
    46
    Сообщений
    32,293
    Репутация
    14626
    Цитата Сообщение от Hose Посмотреть сообщение
    Про ваш пример, напрашивается ваша же цитата: "это какой то кривой дизайн. имхо".
    Воздержусь от подробностей, дабы не слишком препятствовать ТС выискивать скудные сообщения по теме, в его топике
    Та ладно, ответ уже есть - то что я спросил невозможно.

  9. Вверх #29
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    Цитата Сообщение от Reflector Посмотреть сообщение
    Эээ... Хорошо, переделаем как ты хотел:
    Код:
    class A
    {
    public:
        virtual ~A() = 0;
    };
    
    A::~A() {}
    
    class B : public A
    {
        ~B() { cout << "~B()"; }
    };
    
    A* b = new B;
    delete b;
    Что поменялось? Для того чтобы вообще скомпилировать код с чисто виртуальным деструктором нужно объявить его тело(A::~A() {}) и тогда он ничем не будет отличаться от просто виртуального деструктора, потому если не было никаких утечек в моем предыдущем коде, то не будет и в этом. Разница в том, что класс A стал "абстрактным" и его экземпляр я создать напрямую не могу, о чем DiMomite тебе и говорил, но какое это имеет отношение к утечкам? Никакого
    мде.. давно я компили с++.
    был неправ вспылил.
    индивидуальная субстанция разумной природы

  10. Вверх #30
    Частый гость
    Пол
    Мужской
    Адрес
    Одесса
    Сообщений
    954
    Репутация
    260

  11. Вверх #31
    Цитата Сообщение от maxx™ Посмотреть сообщение
    Как на с++ создать объект, если имя класса становится известным только на этапе выполнения (имя родительского класса известно и в процессе написания программы)? Это вообще возможно?
    Тут написали много букв.
    Правильный ответ - язык этого не позволяет.
    А в остальном, что с фабрикой, что без - выкручивайся исходя из этого утверждения.


Ответить в теме
Страница 2 из 2 ПерваяПервая 1 2

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения