Re: многократный вызов конструктора глобального объекта
От: merlinJap  
Дата: 06.07.04 15:26
Оценка:
Здравствуйте, andsin, Вы писали:

A>Привет!

A>Вопрос, быть может, дурацкий, но как избежать многократного вызова констуктора глобально объекта. В файле cont.h объявлено:
A>
A>typedef class _CONTAINER{
A>} CCONTAINER;
A>// ниже
A>static CCONTAINER container;
A>

A>Я думал, что объявив глобальный объект с помощью static, я добьюсь того, что конструктор будет вызван единожды. Ан нет! Конструктор вызывается столько раз, сколько раз в программе встречается #include "cont.h". Как я должен описать объект, чтобы конструктор был вызван однажды?
A>З.Ы. @pragma once почему-то использовать не хочется.
A>Спасибо!

1. в хидере объявлять переменные нестоит, для этого воспользуйтесь extern;
2. Обязательно заключайте содержимое хидера в:

#ifndef ...
#define ...
#endif


3. Ну а собственно в .сср уже и объявляейте статический объект

Вот пример кода:
Abra.h Он и содержит требуемый объек
#ifndef _CLASSA_H_
#define _CALSSA_H_
...

typedef class CAbra
{
public:
    CAbra(){
        printf("Constructor\n");
    }
    virtual ~CAbra(){}
}ABRA;
#endif

Знаю что коряво объявлять так функции, но совсем не хотелось делать еще один срр
temp1.h Здесь объявляем внешний объект
#ifndef _TEMP1_H_
#define _TEMP1_H_

#include "abra.h"

extern ABRA abra_class;

#endif

temp1.срр Здесь описываем статический объект объявленный внешним
#include "temp1.h"
 static CAbra abra_class;



Вооля...сколько раз не подключай...больше одного раза конструктор не вызоветься (как не проси )
С уважением merlinjap.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.