Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Singleton 
:(
    Опции темы
zss
Дата 14.1.2006, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: 1
Всего: 2



есть класс

Код
class A{
private :
    A(){;}
    ~A(){;}
    A (const A&);
    A& operator = (const A&);

public :
    static A& Instance (){
        static A a;
        return a;
    }
};


тогда если
Код
void main (void){
A& a = A::Instanse ();
...
}


почему компилятор говорит открыть деструктор, если а - это ссылка

В VC этот код проходит на ура.
Почему такая несправедливость smile ?
PM MAIL ICQ   Вверх
Fin
Дата 14.1.2006, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: нет
Всего: 10



У тебя не предусмотрен механизм уничтожения. Мой VC на параноидальном уровне выдал целую коллекцию ошибок на твой код.
Цитата

class.cpp(13) : error C2248: 'A::~A' : cannot access private member declared in class 'A'
        class.cpp(4) : see declaration of 'A::~A'
class.cpp(16) : error C2039: 'Instanse' : is not a member of 'A'
        class.cpp(1) : see declaration of 'A'
class.cpp(16) : error C2065: 'Instanse' : undeclared identifier
class.cpp(16) : error C2440: 'initializing' : cannot convert from 'int' to 'class A &'
        A reference that is not to 'const' cannot be bound to a non-lvalue
Error executing cl.exe.

class.exe - 4 error(s), 0 warning(s)



--------------------
Пролетал мимо.
PM MAIL   Вверх
TIGERоX
Дата 14.1.2006, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


начинающий...
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 7.9.2005

Репутация: 1
Всего: 1



смотрите здесь
http://forum.vingrad.ru/index.php?showtopic=77775


Это сообщение отредактировал(а) TIGERоX - 14.1.2006, 01:32
PM MAIL   Вверх
Void
Дата 14.1.2006, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: нет
Всего: 173



Fin
Три из четырех ошибок - следствие опечатки. Открытый деструктор здесь не нужен - можешь проверить по Comeau online.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Fin
Дата 14.1.2006, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: нет
Всего: 10



Код

static A& Instance (){
.........................................

A& a = A::Instanse ();


Сейчас поменял s на с. Все равно осталась первая ошибка. Что не может достучаться до private.
Добавлено @ 01:35
Я понимаю, что деструктор не нужен. Но если создавать экземпляр класса динамически, то получается провисон в памяти. Я обычно не люблю такие провисоны. Хотя знаю, что всего в единственном экземпляре. Лучше поставить еше один метод со счетчиком экземпляров. И после обнуления счетчика удалять экземпляр.

Это сообщение отредактировал(а) Fin - 14.1.2006, 01:36


--------------------
Пролетал мимо.
PM MAIL   Вверх
Artemon
Дата 16.1.2006, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



Что вы паритесь, перенесите деструктор в public и дело с концом
Добавлено @ 07:31
Да и ешё, Instanse - замени на другое слово


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
zss
Дата 16.1.2006, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: 1
Всего: 2



Цитата(Artemon @ 16.1.2006, 07:30 Найти цитируемый пост)

Что вы паритесь, перенесите деструктор в public и дело с концом


это можно сделать, но это не безопасно
Да и какой же это тогда синглетон smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.