| 
			| 
					
						| lapulya 
								Молодой специалист    Offline | 
								|  | « Ответ #150 : 03-01-2010 11:17 »  |  | 
 
 Алексей1153++,  Дык я знаю разницу между виртуальным и не виртуальным деструктором, только к данному случаю то это какое отношение  ты же пишешь аллокатор, если он хапает память (а он только это и делает    ) и если в деструкторе он эту память освобождает (а именно так и будет), то пиши пропало... А  "Ctrl-C" - это о чём ? У мну в студии нет такого сочетания ) это грохает прогу запущенную из комадной строки в консоли (типа когда ты ее запустил из студии) |  
						| 
								|  |  
								|  |  Записан | 
 
 С уважением Lapulya |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #151 : 03-01-2010 14:37 »  |  | 
 
 ты же пишешь аллокатор, если он хапает память 
 Ну, то есть, в случае наследования он, конечно, что-то и захапает, только я же его мемберами то не пользуюсь. Так что, в Багдаде полная спокуха на этот счёт ) Ну я уже понял, что наследовать не надо, смысла нету, просто содрать из исходников код и переписать |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| lapulya 
								Молодой специалист    Offline | 
								|  | « Ответ #152 : 03-01-2010 23:56 »  |  | 
 
 Пушистый... я тебя ПОКУСАЮ!!! прочитай зачем нужен виртуальный деструктор!!! В Багдаде все плохо - места нет, все аллокатор, падла, сожрал, потому что пушистый не знает зачем нужен виртуальный деструктор!!! |  
						| 
								|  |  
								|  |  Записан | 
 
 С уважением Lapulya |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #153 : 04-01-2010 03:58 »  |  | 
 
 Багдад мирно спит   |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| lapulya 
								Молодой специалист    Offline | 
								|  | « Ответ #154 : 04-01-2010 04:01 »  |  | 
 
 Не    еще нет   ) |  
						| 
								|  |  
								|  |  Записан | 
 
 С уважением Lapulya |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #155 : 08-01-2010 20:47 »  |  | 
 
 Ну а всё-таки:насколько я понял по экспериментам, то когда вызывается метод вектора resize и происходит увеличение размера вектора, то конструктор типа элемента вектора вызывается один раз. А потом, так понимаю, содержимое этого "эталона" копируется в новые экземпляры. Так ? То есть, я к чему, если в конструкторе завести, к примеру, статический счётчик - он будет неправильно подсчитывать количество созданных экземпляров ?
 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Вад | 
								|  | « Ответ #156 : 08-01-2010 23:31 »  |  | 
 
 Думаю, он в любом случае будет неправильно подсчитывать - потому что экземпляры в массе своей будут порождаться конструктором копирования, а если поставить счётчик и там - то будет весьма сложно определить, сколько экземпляров создаётся по делу, потому что при операциях над вектором значения также будут копироваться.
 Насчёт механизма копирования вектора не уверен - надо смотреть исходники. По-моему, должен делаться realloc силами аллокатора, а вот как затем происходит копирование - подозреваю, с помощью копирующего конструктора. Боюсь соврать.
 |  
						| 
								|  |  
								| « Последнее редактирование: 08-01-2010 23:36 от Вад » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #157 : 09-01-2010 05:28 »  |  | 
 
 Ну мне как бы счётчик и не нужен, я пытаюсь разобраться, сколько раз конструктор вызовется при увеличении вектора на N элементов |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #158 : 12-05-2010 09:31 »  |  | 
 
 пытаюсь сделать такую вещь: имеется несколько структур, и нужно, чтобы они все были такого вида #pragma pack(push,1)struct s1
 {
 union
 {
 struct
 {
 BYTE m_body7[7];//общий тел
 };
 
 struct
 {
 //7 байтов структуры s1
 BYTE by;
 WORD w;
 DWORD dwd;
 };
 
 };
 };
 
 struct s2
 {
 union
 {
 struct
 {
 BYTE m_body7[7];//общий тел
 };
 
 struct
 {
 //7 байтов структуры s2
 WORD wd1;
 WORD wd2;
 WORD wd3;
 BYTE by1;
 };
 
 };
 };
 #pragma pack(pop)
 
пытаюсь зашаблонить: #pragma pack(push,1)template<typename T>
 union u_PutData
 {
 struct {BYTE m_body7[7];};	//общий тел
 struct :public T{};		//разные данные
 u_PutData()
 {
 ::memset(&m_body7,0,sizeof(m_body7));
 }
 };
 #pragma pack(pop)
 
но при определении конечных структурок не получается задать параметр T как безымянный, то есть так: struct s2:public u_PutData<
 struct //безымянная структура - хочу так!!!
 {
 WORD wd1;
 WORD wd2;
 WORD wd3;
 BYTE by1;
 };
 >{};
 
как это сделать или сделать максимально похоже ? |  
						| 
								|  |  
								| « Последнее редактирование: 12-05-2010 09:34 от Алексей1153++ » |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Вад | 
								|  | « Ответ #159 : 12-05-2010 10:20 »  |  | 
 
 А почему ты так хочешь?    В смысле, чего добиваешься - спрятать структуру? От кого? От этого зависит, что будет означать "сделать похоже". Кроме того, от union наследоваться не получится. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Dimka 
								ДеятельКоманда клуба    Offline 
								Пол:    | 
								|  | « Ответ #160 : 12-05-2010 13:24 »  |  | 
 
 По-моему это бессмысленная затея с union. Достаточно: #include <iostream>
 struct X
 {
 unsigned char x;
 };
 
 template<class T>
 class U
 {
 private:
 T instance;
 public:
 unsigned char *getBody()
 {
 return reinterpret_cast<unsigned char *>(&this->instance);
 }
 T *operator->()
 {
 return &this->instance;
 }
 };
 
 int main()
 {
 U<X> x;
 x->x = 'X';
 std::cout << x->getBody()[0] << std::endl;
 return 0;
 }
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Программировать - значит понимать (К. Нюгард)Невывернутое лучше, чем вправленное (М. Аврелий)
 Многие готовы скорее умереть, чем подумать (Б. Рассел)
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #161 : 12-05-2010 14:23 »  |  | 
 
 Dimka, да, наверное так проще. Ещё в конструктор в дебаге добавлю контроль на размер в 7 байтов
 Вад, да фигнёй, похоже, я страдаю ) Все структуры должны быть 7 байтов, содержимое же разное. Вот и хотел эту семёрку так обеспечить. Наследование не требуется
 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #162 : 12-05-2010 14:27 »  |  | 
 
 и всё же интересно - можно ли безымянную структуру как параметр шаблона передать )) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #163 : 12-05-2010 14:46 »  |  | 
 
 кстати, ещё проще можно сделать   #pragma pack(push,1)union sX
 {
 BYTE m_body7[7];//общий тел
 
 struct s1
 {
 BYTE by;
 WORD w;
 DWORD dwd;
 }m_s1;
 
 struct s2
 {
 WORD wd1;
 WORD wd2;
 WORD wd3;
 BYTE by1;
 }m_s2;
 };
 #pragma pack(pop)
 
 |  
						| 
								|  |  
								| « Последнее редактирование: 12-05-2010 17:52 от Алексей1153++ » |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #164 : 01-08-2010 16:33 »  |  | 
 
 для этих целей есть специальная инструкция,  template class Dinamic<int>; 
блин, ну не получается у меня всё равно шаблонный метод в файл реализации выпихнуть ( да что там в файл, даже в одном файле не хотит компилироваться (по крайней мере в 6-й студии) class A{
 public:
 template<typename T>
 int F(T t,int i);
 };
 
 template<typename T>
 int A::F(T t,int i)
 {
 return 0;
 }
 
 main()
 {
 A a;
 a.F("1",1);
 }
 
error C2893: Failed to specialize function template 'int __thiscall A::F(T,int)'         With the following template arguments:         'char *' А вот в девятке безо всяких пинков - идеально  выходит ) ------------------------------------------------- Хм, а вот тоже нифига не идеально. На этом простеньком примере всё ок, в на большом проекте заупрямился линкер - начал жаловаться на неразрешённые внешние элементы А вышеупомянутую инструкцию не могу понять, как применить - ведь у меня не класс, а функция шаблонная ))) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Антон (LogRus) | 
								|  | « Ответ #165 : 03-08-2010 04:26 »  |  | 
 
 Алексей1153++, давай договоримся, что "шестёрка" и C++ это разные вещи   |  
						| 
								|  |  
								|  |  Записан | 
 
 Странно всё это.... |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #166 :  03-08-2010 05:08 »   |  | 
 
 Та речь не про шестёрку уже    Но я победил при помощи промежуточной не шаблонной функции (нечто вроде специализации) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	|  |