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

Создание и удаление объектов - C++

Восстановить пароль Регистрация
 
Kamuniaft
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 3
16.04.2013, 17:19     Создание и удаление объектов #1
Люди, прошу прошения за тупой вопрос, но что-то в гугле сходу не нашел. Вот, допустим, есть класс реализующий простенькую очередь.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class queue 
{
private:
    int *q;
    int head, tail, num, length;
public:
    queue() : head(0), tail(0), num(0), length(10) 
    {
        q = new int[length];
    }
 
    queue(int length_init) : head(0), tail(0), num(0), length(length_init)
    {
        q = new int[length];
    }
 
    ~queue()
    {
        delete []q;
    }
В мэйне создается объект класса
C++
1
queue queue1(count);
Потом вызываем деструктор для этого объекта.

Собственно вопрос - после вызова деструктора, возможно создание нового объекта с таким же именем queue1? ( у меня компилятор ругается, но я не уверен что само создание и удаление опсианы правильно). Судя по дебаггеру, память так и не освобождается до конца программы, и я что-то не допру почему.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.04.2013, 17:23     Создание и удаление объектов #2
Цитата Сообщение от Kamuniaft Посмотреть сообщение
возможно создание нового объекта с таким же именем queue1?
внутри фигурных скобок может быть только один queue1, но можно сделать так
C++
1
2
3
4
5
6
7
8
9
10
{
    {
         queue queue1(count);
         //...
    }
    {
         queue queue1(count);
         //...
    }
}
Kamuniaft
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 3
16.04.2013, 18:24  [ТС]     Создание и удаление объектов #3
Это действительно утихомирило компилятор. Но повлекло за собой ошибку "expression block type is valid" в районе вызова деструктора. Собственно разобрался с проблемой закоментив деструктор. Проблема как я понял в том, что компилятор сам вызывает деструктор в конце каждого локального блока, получается деструктор я вызывал два раза. Возникли вопросы - когда, и вообще зачем используется явный вызов деструктора объекта?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.04.2013, 18:39     Создание и удаление объектов #4
Цитата Сообщение от Kamuniaft Посмотреть сообщение
"expression block type is valid" в районе вызова деструктора
не надо вызывать деструктор явно если объект созоздаеться так как вы написали
C++
1
queue queue1(count);
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
16.04.2013, 18:48     Создание и удаление объектов #5
Цитата Сообщение от Kamuniaft Посмотреть сообщение
когда, и вообще зачем используется явный вызов деструктора объекта?
В очень редких случаях, например внутри оператора delete.
Yandex
Объявления
16.04.2013, 18:48     Создание и удаление объектов
Ответ Создать тему
Опции темы

Текущее время: 16:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru