Форум программистов, компьютерный форум CyberForum.ru

Виртуальные деструкторы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как обмануть указатель? http://www.cyberforum.ru/cpp-beginners/thread927474.html
Я бы хотел сделать так, чтобы функция my_function могла менять значение value, а alien_function - нет. Вносить изменения в код alien_function и Alien_class я не могу, поелику они написаны не мной. My_class { Alien_class value; } Alien_class my_function(Alien_class x) { }
C++ Ошибка в программе, читающей файлы Пишу программу, которая принимает произвольное количество файлов с записями на вход и в конечном счете выводит эти записи отсортированные в последний принятый файл. Естественно, у меня ничерта не работает и я отлаживаю программу кусками (так что позже, скорей всего, задам не один вопрос по ней же). Вот в этом куске я пытаюсь понять почему не удается нормально записать содержимое файла в... http://www.cyberforum.ru/cpp-beginners/thread927463.html
Оператор присваивания C++
Добрый день! Помогите, пожалуйста, разобраться. Я не совсем понимаю работу перегруженного оператора присваивания в классе String, который содержит переменные-члены: указатель char *itsString и переменную unsigned short itsLen (длина строки): String& String::operator=(const String & rhs) { if (this == &rhs) return *this; delete itsString; itsLen=rhs.GetLen(); ...
Написать функцию, определяющую пересекаются ли два отрезка C++
На вход подаются координаты начал и концов двух отрезков. Нужно определить пересекаются ли они. Добавлено через 21 минуту Или хотя бы объяснить, как это написать
C++ Отладка консольного приложения http://www.cyberforum.ru/cpp-beginners/thread927451.html
в отладчике OllyDbg открыл оконный проект из Делфи, вся информация, код отображаются нормально. Таким же способом открыл обычную консольную программу, просто запустилась прога, а кода и никакой информации нету. Почему, что не так?
C++ Определить, сколько раз встречается число 5 среди элементов всей матрицы Определить, сколько раз встречается число 5 среди элементов всей матрицы. подробнее

Показать сообщение отдельно
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.07.2013, 12:23     Виртуальные деструкторы
BigLow, Если деструктор не объявлен virtual, но объект используется полифорфно - поприветствуйте UB. Вызвать можно - но это плохая идея.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <cstring>
#include <clocale>
#include <iostream>
 
class CBase
{
public:
    CBase(const char *str1)     
    {  
        mStr1 = new char[strlen(str1)+1];  
        strcpy(mStr1, str1); 
    }
 
    ~CBase()                    
    { 
       std::cout << "base dtor" << std::endl;
        delete [] mStr1;
    }
 
protected:
    char *mStr1;
};
 
class CDerived : public CBase
{
public:
    CDerived(const char *str1, const char *str2) 
        : CBase(str1)   
    { 
        mStr2 = new char[strlen(str2)+1];  
        strcpy(mStr2, str2);
    }
 
    ~CDerived()                                             
    {  
       std::cout << "derived dtor" << std::endl;
        delete [] mStr2;
    }
 
protected:
    char *mStr2;
};
 
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    CBase   *ptrBase;   // указатель на базовый класс
 
    ptrBase = new CDerived("String1", "String2");   // присвоение адреса производного класса
    static_cast<CDerived*>(ptrBase)->~CDerived();
    operator delete(ptrBase);
    //delete ptrBase;     // удаление объекта
    
    return 0;
}
 
Текущее время: 14:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru