jawne wywołanie konstruktora

Odpowiedz Nowy wątek
2015-01-28 22:44
anonymous23456
0

http://ideone.com/m9npA2
No co tu źle jest i jak to poprawić?

Pozostało 580 znaków

2015-01-28 22:49
1

a co mówi compile error?

Nie wiem dlaczego ludzie nie czytają logów kompilacji.. - und3f 2015-01-28 23:06

Pozostało 580 znaków

2015-01-28 23:21
0
anonymous23456 napisał(a):

http://ideone.com/m9npA2
No co tu źle jest i jak to poprawić?

Konstruktor jest wywołany podczas tworzenia obiektu. Tutaj obiekt a już istnieje (już został utworzony), więc jaki sens ma wywołanie konstruktora?

Pozostało 580 znaków

2015-01-28 23:27
0

Konstruktor jawnie może być wywoływany za pomocą 'placement new': http://en.wikipedia.org/wiki/Placement_syntax


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit, 2015-01-28 23:27
zwykłe new też jest przecież jawne... - Azarien 2015-01-28 23:47
no ale zwykłe new nie przyjmuje wskaźnika - Wibowit 2015-01-28 23:49

Pozostało 580 znaków

2015-01-29 02:55
anonymous23456
0

@gośćabc : logi kompilacji sa na ideone.
@twonek : a co jeśli moj operator >> robi dokladnie to samo, co konstruktor?

Pozostało 580 znaków

2015-01-29 08:09
0

a co jeśli moj operator >> robi dokladnie to samo, co konstruktor?

To wywołuj operator >> z konstruktora :P

Albo, nieco bardziej na poważnie: zrób kolejną funkcję, tym razem prywatną i wywołuj ją zarówno z konstruktora jak i operatora >>.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2015-01-30 13:26
anonymous23456
0

@Wibowit : no dobra, ale to brzydkie, nie da się inaczej? I dlaczego? Przecież konstruktor to tylko funkcja, nie tworzy obiektu i bez listy inicjalizacyjnej nie ma nic z tworzeniem wspolnego, podobnie jak destruktor z usuwaniem obiektu.

Pozostało 580 znaków

2015-01-30 14:24
0

no dobra, ale to brzydkie, nie da się inaczej? I dlaczego?
Ale inaczej co? Co chcesz osiągnąć? Bo twój kod jest bez sensu.

Przecież konstruktor to tylko funkcja, nie tworzy obiektu i bez listy inicjalizacyjnej nie ma nic z tworzeniem wspolnego, podobnie jak destruktor z usuwaniem obiektu.
Konstruktor i destruktor to nie są normalne funkcje.

Pozostało 580 znaków

2015-01-30 22:45
0

Jeśli jest brzydkie to opakuj w funkcję lub zrób makro preprocesora. Ewentualnie może jakiś szablon jeśli się da.

Podałem ci dużo opcji do wyboru. Na pytanie "dlaczego?" nie jestem w stanie rzetelnie odpowiedzieć. Musisz zapytać kolesi, którzy kontrolują język C++.

A najlepiej odstaw C++ i zjedz Snickersa :P


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2015-01-31 01:19
anonymous23456
0

Nie rozumiem waszej wrogości. Naprawde nigdy nie pisaliście kodu, w którym konstruktor robi prawie to samo, co operator >> ? I dlaczego nie mogę wywołać tak konstruktora, skoro destruktora mogę?
http://ideone.com/V8A0OZ

Pozostało 580 znaków

2015-01-31 01:43
1
anonymous23456 napisał(a):

Nie rozumiem waszej wrogości.
A gdzie widzisz tę wrogość? To, że ktoś mówi, że Twój kod jest bez sensu, to żadna wrogość (co innego gdyby powiedział, że Ty jesteś bez sensu, jakokolwiek bez sensu to by nie brzmiało).

I dlaczego nie mogę wywołać tak konstruktora, skoro destruktora mogę?
http://ideone.com/V8A0OZ
Bo konstruktor jest wywołany gdy nie ma jeszcze obiektu, a destruktor gdy ten obiekt już żyje i się opala na plaży.
Niemniej nie powinieneś wywołać destruktora w ten sposób. Jeśli obiekt został stworzony na stosie, to nic nie zyskasz a jedynie mącisz kod, bo obiekt i tak zostanie zniszczony i destruktor wywołany gdy obiekt wyjdzie z zakresu. Natomiast jeśli został stworzony na stercie, to niszczysz obiekt nie zwalniając pamięci, czyli masz wyciek pamięci. Prawie nigdy nie powinieneś wywołać destruktora ręcznie (są wyjątki, np. gdy chcesz tylko zniszczyć obiekt ale nie chcesz zwolnić pamięci).

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0