Seite 1 von 1

Ein Problem von Copy-Constructor(pure c und cpp)

Verfasst: 5. September 2006 17:13
von Hass
Hallo zusammen,
Ich habe ein leichteren Program geschrieben,aber stellte ich eine extravagantes Problem fest.

Warum die Antworten sind:

---------------------------------------------------------
C:\helloworld>app
normal ctr
return
a=1 b=2 str=hello,world
des~
---------------------------------------------------------
Mein System ist:
winXP Home
minGW Version 3.2.0 for Win
---------------------------------------------------------
Außere Line 1,2,4... .... ....

Ich verstehte nicht, wo das Program den Copy-Constructor benutzt worden ist.Trotzdem war das Ergebnis sicher,daß der Copy-Constructor verwendet worden ist. Ich bestimme...

---------------------------------------------------------
Mein Program ist
---------------------------------------------------------
#include <string>
#include <iostream>
using namespace std;

class A
{
public:
int a;
int b;
string str;
public:
A(){ cout<<"normal ctr"<<endl; }
A( const A& a ) //copy constructor called here
: a( a.a ), b( a.b ), str( a.str )
{ cout<<"cpy ctr"<<endl; }

~A(){ cout<<"des~"<<endl; }//destructor called here
public:
static A from()//a factory method
{
A ca;
ca.a = 1;
ca.b = 2;
ca.str = "hello,world";

cout<<"return"<<endl;
return ca;
}

void print()
{
cout<<"a="<<a<<" b="<<b<<" str="<<str<<endl;
}
};

int main()
{
A a = A::from();
a.print();
}
:lol: :lol: :lol: :lol: :lol: :lol: :lol: :oops: :oops: :oops:

Verfasst: 6. September 2006 21:42
von Einmaliger
'tschuldigung - wie ist die Frage? Da läuft doch alles wie erwartet.

Verfasst: 7. September 2006 04:17
von Hass
Einmaliger hat geschrieben:'tschuldigung - wie ist die Frage? Da läuft doch alles wie erwartet.
Sorry, das Problem ist einfach.
Warum wird der String, "cpy ctr", nicht gesehen,wenn das Program läuft ?
Wissen Sie? :x

Verfasst: 7. September 2006 12:02
von Goos
VC++ 6
liefert:

normal ctr
return
cpy ctr
des~
a=1 b=2 str=hello, world

Alles ist bei mir also so, wie ich das auch erwartet haette.

Goos

Verfasst: 7. September 2006 12:35
von Hass
Goos hat geschrieben:VC++ 6
liefert:

normal ctr
return
cpy ctr
des~
a=1 b=2 str=hello, world

Alles ist bei mir also so, wie ich das auch erwartet haette.

Goos
Also, ich verstehe....
Aber du kannst mit minGW ... ...
Mein Problem ist nur dabei... ... ...
:roll: :roll:

Verfasst: 7. September 2006 12:49
von Goos
Sorry, ich habe kein minGW.

Goos

Verfasst: 8. September 2006 09:30
von Hass
Goos hat geschrieben:Sorry, ich habe kein minGW.

Goos
Schade.......
VCpp und minGW sei wenige...........verschieden.........
Microsoft und Opensource.........................................langweilig
:twisted:
:twisted:

Verfasst: 10. September 2006 15:13
von Einmaliger
- An welcher Stelle sollte der Copyconstructor aufgerufen werden?
- VC 6 kann kein korrektes C++ (nur sowas, was es C++ nennt und was grob danach aussieht)

Verfasst: 11. September 2006 08:46
von Goos
Einmaliger hat geschrieben:(nur sowas, was es C++ nennt und was grob danach aussieht)
Genau so ist das und jeder andere Compiler macht das auch so. VC++ machts zwar schlimmer als so manch anderer Compiler, aber man kann sich daran gewoehnen :D

Goos

PS: ach und nu bitte keine ewigen Diskussionen, ich weiss dass der minGW sehr standardkonform ist :)

Verfasst: 12. September 2006 22:37
von rmeeh
Die Problematik wird von Klaus Schmaranz in "Softwareentwicklung in C++ -Springer Verlag-) im Kapilel "Einfache Klassen" recht einleuchtend beschrieben, die Sache mit dem Standardkonstruktor. Der Fehler hier liegt IMHO weniger an den Compilern und was sie daraus machen, sondern an der ansich "schlampigen" Implementierung der Klasse. Wenn sich der Programmierer die kleine Mühe macht, einen vernünftigen Konstruktor zu programmieren, der sich zu allem ja auch noch überladen lässt, ist die "Unwägbarkeit Compiler" nämlich plötzlich gar keine mehr und die Klasse läuft auf allen möglichen Zielplattformen rund.
-Grüße Ralf-