Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.16;
Скачать: [xml.tar.bz2];

Вниз

Ограничение на создание количества экземпляров обьектов.   Найти похожие ветки 

 
bkv   (2003-06-02 18:01) [0]

Здравствйте,
Существует ли какой-нибудь механизм, позволяющий ограничивать количество создаваемых обьектов одного класса?


 
Skier   (2003-06-02 18:05) [1]

Конечно. Их подсчёт.


 
Calm   (2003-06-02 18:12) [2]

В секции imlementation модуля, в котором объявлен класс объекта нужно сделать глобальную переменную.

В конструкторе класса инкрементировать ее, а в деструкторе - декрементировать.

Если в конструкторе обнаруживается, что значение счетчтика достигло определенного значения, то вызывать исключение. При этом автоматически вызовется десруктор объекта.


 
Мое имя   (2003-06-02 18:28) [3]

семафор?


 
bkv   (2003-06-03 10:20) [4]

Т.е нет никаких механизмов языка для решения этой задачи кроме подсчета?


 
vlv   (2003-06-03 10:25) [5]

В Паскале не предусмотрены переменные класса, только ОБЪЕКТЫ.

Так что лучше всего воспользоваться общими переменными, как советует Calm.


 
Skier   (2003-06-03 10:29) [6]


> В Паскале не предусмотрены переменные класса, только ОБЪЕКТЫ.

То есть ?


 
iZEN   (2003-06-03 11:22) [7]

Для Skier © (03.06.03 10:29).

Ну, в Java есть не только методы класса, но и поля:

public class Demo {
//Закрытый конструктор
private Demo() {
super();
}
//Глобальная переменная - счётчик экземпляров (видна из всех экземпляров данного класса)
private static int globalField = 0;
//Фабричный метод
public static Demo init() {
globalField++;
return new Demo();
}
//метод деинициализации (деструкторов в Java нет)
public void destroy() {
globalField--;
}
}

В ObjectPascal только так:

Demo = class
private
constructor Create();//Закрытый конструктор
public
destructor Destroy(); override;
class function Init(): Demo;//Фабричный метод
end;

implementation

var
GlobalField: Integer;//Глобальная переменная - счётчик экземпляров

//Закрытый конструктор
constructor Create();
begin
inherited Create();
end;

//Перегруженный деструктор
destructor Destroy(); override;
begin
Dec(GlobalField);
inherited Destroy();
end;

//Фабричный метод
class function Demo.Init(): Demo;
begin
Inc(GlobalField);
Result := Demo.Create();
end;



 
Skier   (2003-06-03 11:24) [8]

>iZEN © (03.06.03 11:22)

> Ну, в Java есть не только методы класса, но и поля:

И что ? У классовв Delphi не может быть полей что ли ?!


 
iZEN   (2003-06-03 11:27) [9]

Для Skier © (03.06.03 11:24).

Необходимо различать:
1) поля класса и поля объекта;
2) методы класса и методы объекта.
В Delphi осознано только п.2).



 
Skier   (2003-06-03 11:35) [10]

>iZEN © (03.06.03 11:27)
Ааа. Ты в этом смысле...


 
Sandman25   (2003-06-03 11:42) [11]

Skier © (03.06.03 11:24)

В Delphi будет такое поле будет в каждом обьекте.
В Java (и С++) можно сделать поле, которое будет shared между всеми экземплярами класса.


 
Skier   (2003-06-03 11:43) [12]

Господа, не наседайте ! Я уже понял что имелось в виду.


 
Sandman25   (2003-06-03 12:02) [13]

Skier © (03.06.03 11:43)

Извините. Я долго писал - Вашего сообщения Skier © (03.06.03 11:35) еще не видел.



 
VaS   (2003-06-03 13:20) [14]

Господа, человек под именем "Мое имя" давно назвал самый простой и потокобезопасный способ - семафор.


 
Reindeer Moss Eater   (2003-06-03 14:07) [15]

В секции imlementation модуля, в котором объявлен класс объекта нужно сделать глобальную переменную.
В конструкторе класса инкрементировать ее, а в деструкторе - декрементировать.
Если в конструкторе обнаруживается, что значение счетчтика достигло определенного значения, то вызывать исключение. При этом автоматически вызовется десруктор объекта.


Все это поможет ограничить количество объектов, создаваемых в ОДНОМ процессе.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.06.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.006 c
1-50374
pathfinder
2003-06-04 01:20
2003.06.16
opendialog.filename...


1-50334
Тфьу
2003-06-03 13:57
2003.06.16
Ошибки TRegistry внутри try .. except


1-50274
kull
2003-06-04 13:26
2003.06.16
Генерация HTML текста...


1-50313
McSimm2
2003-06-03 11:55
2003.06.16
Снова ComboBox


3-50257
kalishenko
2003-04-29 20:16
2003.06.16
Btrieve и Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский