crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> private деструктор, как это сделать?
mezmay
  опции профиля:
сообщение 19.4.2011, 13:16
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 272
Регистрация: 13.7.2009
Из: Ростов-на-Дону
Пользователь №: 904

Спасибо сказали: 16 раз(а)




Репутация:   1  


Помогаю одному студенту выполнить лабу.
Там требуется создать простой класс, некотрые действия над ним простые... Но потом в задании сказано - перенести конструкторы и деструкторы в секцию private и решить возникшие после этого проблемы с помощью статического фабричного метода (!)
Ну, с консрукторами все понятно - создаем статические методы, так называемые именованные конструкторы.
Вместо деструктора тоже вроде ясно - public метод destroy(), делающий delete this.

Но как создавать объекты такого класса - не понятно, компилятор ругается

class MyClass
{
private:
    MyClass();
    ~MyClass();

public:
    static MyClass createInstance() {return MyClass();};
    void destroy() {delete this;};

...
...
...
}

int main(int argc, char* argv[])
{
    MyClass my = MyClass::createInstance(); // нельзя, ошибка error C2248: 'MyClass::~MyClass' : cannot  access rivate member declared in class 'MyClass'
    MyClass *pMy = &MyClass::createInstance(); //нельзя, тоже самое

    return 0;
}


Сообщение отредактировал mezmay - 19.4.2011, 13:23
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mezmay
  опции профиля:
сообщение 19.4.2011, 13:51
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 272
Регистрация: 13.7.2009
Из: Ростов-на-Дону
Пользователь №: 904

Спасибо сказали: 16 раз(а)




Репутация:   1  


решил так:
static MyClass* createInstance() {return new MyClass();};
...
...
MyClass *pMy = MyClass::createInstance();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 19.4.2011, 19:07
Сообщение #3


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


А если переопределить коструктор копировщик и оператор присваивания, то получится класический синглтон. :)

Так как счетчик ссылок тебе в данном случае просто необходим.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 20.4.2011, 7:36
Сообщение #4


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(ViGOur @ 19.4.2011, 21:07) *
Так как счетчик ссылок тебе в данном случае просто необходим.

отнюдь. это НЕ синглтон ни разу. каждый раз создаются разные объекты и нет никаких множественных указателей на один объект.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ЙаМайскЫйПчОЛ
  опции профиля:
сообщение 20.4.2011, 21:12
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 154
Регистрация: 10.7.2008
Из: СПб
Пользователь №: 232

Спасибо сказали: 7 раз(а)




Репутация:   5  


это не синглтон, и кроме статического метода для конструирования у них ничего общего

Сообщение отредактировал ЙаМайскЫйПчОЛ - 20.4.2011, 21:17
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 20.4.2011, 21:41
Сообщение #6


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(ViGOur @ 19.4.2011, 20:07) *
если переопределить коструктор копировщик и оператор присваивания, то получится класический синглтон.
Ребят, ну вы чего! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.4.2011, 8:14
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(mezmay @ 19.4.2011, 16:16) *
перенести конструкторы и деструкторы в секцию private и решить возникшие после этого проблемы с помощью статического фабричного метода (!)
Это называют - фабрика.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.1.2025, 21:55