Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 13:57 13.07.25 
Компютри и Интернет
   >> Програмисти
*Кратък преглед

Страници по тази тема: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | (покажи всички)
Тема я пробвайте да компилирате това:нови  
Авторzaphod (Нерегистриран)
Публикувано20.05.05 12:04



за мое голямо учудване, в темплейта се подменят и имената на конструктора и деструктора. при VC6.0 няма проблем, в примера по-долу се вика деструктора както е по замисъл, обаче дали и другите компилатори ще го направят така? който не го мързи да пробва. интересното е когато се сложи параметър клас, който няма деструктор - тогава пасажа с деструктора въобще не генерира код, но не дава и грешка, просто си го прескача.


class B{
public:
~B(){
printf("destructor!\n");
}
};

template<class cls>
void A(void *p){
((cls*)p)->~cls();
}

int main(int argc, char* argv[])
{
B inst;
A<B>(&inst);
}




Тема Я пак, че не разбрах нещонови [re: zaphod]  
Автор Colombino (безработен)
Публикувано20.05.05 13:11



Парчето код печати 2 пъти destruktor на изхода. Струва ми се нормално поведение, не схващам ти какво очакваш да стане.

Редакция:

>> клас, който няма деструктор

Те такова животно нема. Има клас с тривиален деструктор.

System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_

Редактирано от Colombino на 20.05.05 13:28.



Тема Re: я пробвайте да компилирате това:нови [re: zaphod]  
АвторЧвopko (Нерегистриран)
Публикувано20.05.05 13:38



Вместо template<class cls>

void A(void *p){

((cls*)p)->~cls();

}

може да направиш "по-изящният" вариант:

template<class T>
void AA(T & t)
{
t.~T();
}
А иначе всичко си е нормално. Деструктора си го има, дори и ти да не си го указал. Виж асемблерския код.
Поправи ме, ако греша, но не вдявам какво точно питаш...



Тема Re: я пробвайте да компилирате това:нови [re: zaphod]  
АвторПeтpocян (Нерегистриран)
Публикувано20.05.05 13:40



Вместо template<class cls>

void A(void *p){

((cls*)p)->~cls();

}

може да направиш "по-изящният" вариант:

template<class T>
void AA(T & t)
{
t.~T();
}
А иначе всичко си е нормално. Деструктора си го има, дори и ти да не си го указал. Виж асемблерския код.
Поправи ме, ако греша, но не вдявам какво точно питаш...



Тема Re: Я пак, че не разбрах нещонови [re: Colombino]  
Автор Pekoнcтpykтop (Нерегистриран)
Публикувано20.05.05 15:42



Те такова животно нема. Има клас с тривиален деструктор.

Искаш да кажеш, че ако няма изрично дефиниран деструктор, се вика някакъв фиктивен, вмъкнат от компилатора?





Тема Не точно [re: Pekoнcтpykтop]  
Автор Colombino (безработен)
Публикувано20.05.05 16:01



Искам да кажа, че на теория всеки клас има деструктор, бил той и празният деструктор. В тоя смисъл можеш да му извикаш деструктора дори без да е дефиниран и той ще прави нищо - няма да генерира код. Поне не в релийз, за дебъг ба ли му мамата.

System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_


Тема ами очаквахнови [re: Colombino]  
Авторzaphod (Нерегистриран)
Публикувано20.05.05 16:18



да ми каже че няма функция ~cls(), защото такава наистина няма. другите низове cls няма да се подменят, но деструктора и конструктора явно ги търси. а иначе дали всеки клас има деструктор:
пробвай
int str;
str.~int();
и пак ще приказваме



Тема Я пак помислинови [re: zaphod]  
Автор Colombino (безработен)
Публикувано20.05.05 16:48



Пробвай тва и ми кажи има ли int деструктор, или не.


template<class cls>
void A(cls *p)
{
p->~cls();
}

int main(int argc, char* argv[])
{
int inst;
A(&inst);
}


System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_


Тема Re: Не точнонови [re: Colombino]  
Автор Dorian_Gray (Bachelor #1)
Публикувано20.05.05 16:49



Each class has one and only one destructor. It is called, when an object of the class is
destroyed. If the programmer does not define one, the compiler defines a destructor.
The programmer has to define one, when class constructors use malloc() or new.



Тема Именно, денови [re: Dorian_Gray]  
Автор Colombino (безработен)
Публикувано20.05.05 17:00



Ако имаш, например, членове с деструктори това извикване ще им извика деструкторите. Забавното е, че ако нямаш, студиото дава warning за неизползвана променлива [на 4 ниво :-)]. Според мен това не е коректно, извикването на празна функция, не е неупотреба. Кво като е дефинирана служебно ...

System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_



Страници по тази тема: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | (покажи всички)
*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2025 Dir.bg Всички права запазени.