Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Singleton


Автор: zss 14.1.2006, 00:42
есть класс

Код
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 ?

Автор: Fin 14.1.2006, 01:24
У тебя не предусмотрен механизм уничтожения. Мой 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)

Автор: TIGERоX 14.1.2006, 01:28
смотрите здесь
http://forum.vingrad.ru/index.php?showtopic=77775

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

Автор: Fin 14.1.2006, 01:29
Код

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

A& a = A::Instanse ();


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

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

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

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


это можно сделать, но это не безопасно
Да и какой же это тогда синглетон smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)