2016-03-28 4 views
2

Я работаю над проектом C++, но хочу знать, как вызвать функцию-член из класса/структуры внутри деструктора. Остальная часть моего проекта идет хорошо, так что я просто нужно знать, что это закончится с ним :)Как вызвать функцию-член от деструктора

~Drink() 
    { 
     cout << "hi"; 
     cout << "I want to know how to summon a member function from a destructor."; 
    } 

    int Drink::dailyReport() 
    { 
     cout << "This is the member function I want to call from the destructor."; 
     cout << "How would I call this function from the destructor?" 
    } 

Правильный синтаксис и все будут оценены! Примеры того, как вызвать функцию-член от деструктора, будут прекрасными!

ответ

2

Проблема здесь состоит в том, что вы не префикс своего деструктора с Drink::

Поскольку деструктор не знает, к какому классу он должен быть связан с (при условии, что в настоящее время определяются вне объявления класса) , он не знает, что у него даже есть функция-член для вызова.

Попробуйте переписывать код:

Drink::~Drink() // this is where your problem is 
{ 
    cout << "hi"; 
    cout << "I want to know how to summon a member function from a destructor."; 
    dailyReport(); // call the function like this 
} 

int Drink::dailyReport() 
{ 
    cout << "This is the member function I want to call from the destructor."; 
    cout << "How would I call this function from the destructor?" 
} 
+0

Ahh да, спасибо, что указали, что вне - я только что отредактировал в изменении :) –

+0

Ах спасибо! Я думал, что это будет намного сложнее, но я рад, что это намного проще! –

0

Класс деструктора в основном, как и любой другой функции члена: вы можете вызывать функции члена в классе и использовать переменные-члены точно так же, за исключением:

  1. Имейте в виду, конечно, что деструкторы предназначены для очистки и (если вы обрабатываете его вручную) освобождение ресурсов и динамической памяти и т. Д., Поэтому вам, вероятно, не должно быть do ing многое в деструкторе.

  2. Если ваш класс становится достаточно сложным, чтобы использовать виртуальные функции, все становится немного сложнее.

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

+2

Вот почему вы всегда объявляете своего деструктора noexcept. Всегда. – Vincent