Чистый виртуальный деструктор в C++

С помощью Шилли и небольшого мозгового штурма я нашел решение своей проблемы и выкладываю его здесь для всех, кто в моей ситуации. Оказывается, что Freshdesk (веб-сайт внутри iframe) позволяет использовать пользовательский javascript. Используя эту функциональность, я придумал следующее:

1) использовать parent.postMessage при загрузке первой страницы, чтобы отправить URL активной в данный момент страницы на мой основной веб-сайт.

2) использовать sessionStorage для сохранения URL текущей страницы Freshdesk на моем веб-сайте

3) при загрузке первой страницы моего основного веб-сайта проверьте, установлено ли значение sessionStorage, и если да, установите src для iFrame на это значение.

Это не совсем настоящее решение «только при обновлении», однако оно заставляет последнюю посещенную страницу iFrame сохраняться в течение оставшейся части сеанса пользователя, что означает, что они не потеряют свое место при обновлении или временном перемещении. Благодаря использованию sessionStorage, он также сбрасывается обратно, когда пользователь закрывает страницу, то есть при следующем посещении он перезапускается на домашней странице Freshdesk (или на любом другом веб-сайте, который вы размещаете в iFrame).

158
задан bitek 17 October 2012 в 14:51
поделиться

2 ответа

Да. Также необходимо реализовать деструктор:

class A {
public:
    virtual ~A() = 0;
};

inline A::~A() { }

должен быть достаточным.

И так как это добралось вниз голосование, я должен разъясниться: Если Вы получите что-нибудь из A и затем попытаетесь удалить или уничтожить его, A, то деструктор в конечном счете назовут. Так как это чисто и не имеет реализации, неопределенное поведение последует. На одной популярной платформе, которая вызовет purecall обработчик и катастрофический отказ.

Редактирование: фиксация объявления, чтобы быть более совместимой, скомпилированной с http://www.comeaucomputing.com/tryitout/

209
ответ дан MSN 23 November 2019 в 21:41
поделиться

Частные деструкторы: они дадут Вам ошибку, когда Вы создадите объект производного класса - не иначе. Диагностика может появиться все же.

12.4 Деструкторов

деструктор на 6 А может быть объявлен виртуальный (10.3) или чистый виртуальный (10.4); если какие-либо объекты того класса или какой-либо производный класс будут созданы в программе, то деструктор должен быть определен.

класс А с чистым виртуальным деструктором является абстрактным классом. Обратите внимание:

10.4 Абстрактных классов

чистая виртуальная функция на 2 А должны быть определенным только если названный с, или как будто с (12,4), синтаксис квалифицированного идентификатора (5.1).

[ Примечание : объявление функции не может обеспечить и чистый спецификатор и определение — примечание конца]

Взятый прямо из проекта:

struct C {
   virtual void f() = 0 { }; // ill-formed
};
48
ответ дан dirkgently 23 November 2019 в 21:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: