default-funktionen
-
hi
wann werden der copyctor, der zuweisungsop und der dtor vom compiler generiert? unter welchen voraussetzungen?
mfg
-
wenn du keinen selbst schreibst...
-
lol_of_lolcraft schrieb:
zuweisungsop
immer, außer du schreibst ihn selbst.
lol_of_lolcraft schrieb:
copyctor
immer, außer du ermöglichst es ihm nicht oder schreibst ihn selbst.
lol_of_lolcraft schrieb:
dtor
immer, außer du schreibst ihn selbst.
-
Wenn du selbst keine deklarierst, werden sie automatisch deklariert. Und wenn diese automatisch deklarierten Funktionen dann auch genutzt werden, werden sie automatisch definiert.
-
Hmm, für was braucht ein Konstruktur den Destruktur der Basisklasse?
class A { public: A(){} private: ~A() {} }; class B : public A { }; int main() { new B(); // Error: A::~A() is private }
-
Exception-Behandlung (wenn im Konstruktor-Rumpf oder den Membern eine Exception fliegt, müssen die bereits fertig definierten Objektteile wieder zerstört werden), außerdem dürfte der Compiler davon ausgehen, daß du deine konstruierten Objekte auch wieder zerstören willst.
Ergänzung zu Krümelkacker: Der Compiler kann die Default-Methoden natürlich nur dann erstellen, wenn sie syntaktisch legal sind.
-
CStoll schrieb:
Exception-Behandlung (wenn im Konstruktor-Rumpf oder den Membern eine Exception fliegt, müssen die bereits fertig definierten Objektteile wieder zerstört werden), außerdem dürfte der Compiler davon ausgehen, daß du deine konstruierten Objekte auch wieder zerstören willst.
Stimmt klingt logisch, allerdings viel mir gerade aus, dass, wenn man der Konstruktor der Basisklasse nicht selbst definiert, der Compiler nicht mehr mekert. Das verwirrt mich nun gerade ein bischen. Wie lässt sich das erklären?
class A { private: ~A() {} }; class B : public A { }; int main() { new B(); // No error }
-
Also ich erhalte mit VS2010 dann folgende Warnung:
warning C4624: 'B': Der Destruktor konnte nicht generiert werden, da ein Basisklassen-Destruktor nicht zugreifbar ist
Speicher die Adresse in einem pointer und versuche danach ein delete --> möp, geht nicht mehr, da Destruktor benötigt wird.
Versuche ein Objekt auf dem stack anzulegen -> möp, geht auch nicht.P.S.: Macht bei VS2010 keinen Unterschied, ob ich den Basisklassen-Konstruktor definiere oder nicht.