Nasenbaer
2010-11-04, 14:51:21
Hi,
ich bin gerade mit dem Refactoring eines alten Raytracers von mir beschäftigt und habe jetzt folgendes Problem:
Ich habe eine Funktion setBla(const CAbstract& val), die das übergebene Objekt kopieren und dann in CAbstract *_value speichern soll.
class CAbstract
{
// ...
}
class CDerived : public CAbstract
{
// ...
}
// ...
void setBla(const CAbstract& val)
{
// Mögliche Wege
_value = &val; // erstellt keine Kopie - klar! :)
_value = new CAbstract(&val); // Abstrakte klassen lassen sich nicht intanziieren.
_value = val.clone(); // Überladene Funkton erzeugt Kopie und liefert Pointer. Möglich aber gefällt mir nicht.
}
// ...
int main()
{
CDerived test(...);
setBla(test);
}
Ich würde das halt gerne irgendwie über den Copy-Constructor von CAbstract laufen lassen aber wüsste adhoc nicht wie das gehen soll. Gibt es für sowas vielleicht ein tolles Design Patern?
Hintergrund:
Mir gehts im Prinzip darum, dass Werte, die man von extern für ein Objekt setzt, dem Objekt nicht von außen auch wieder unterm Hintern weggerissen werden kann und das Objekt somit auf nen Nullpointer zugreift.
ich bin gerade mit dem Refactoring eines alten Raytracers von mir beschäftigt und habe jetzt folgendes Problem:
Ich habe eine Funktion setBla(const CAbstract& val), die das übergebene Objekt kopieren und dann in CAbstract *_value speichern soll.
class CAbstract
{
// ...
}
class CDerived : public CAbstract
{
// ...
}
// ...
void setBla(const CAbstract& val)
{
// Mögliche Wege
_value = &val; // erstellt keine Kopie - klar! :)
_value = new CAbstract(&val); // Abstrakte klassen lassen sich nicht intanziieren.
_value = val.clone(); // Überladene Funkton erzeugt Kopie und liefert Pointer. Möglich aber gefällt mir nicht.
}
// ...
int main()
{
CDerived test(...);
setBla(test);
}
Ich würde das halt gerne irgendwie über den Copy-Constructor von CAbstract laufen lassen aber wüsste adhoc nicht wie das gehen soll. Gibt es für sowas vielleicht ein tolles Design Patern?
Hintergrund:
Mir gehts im Prinzip darum, dass Werte, die man von extern für ein Objekt setzt, dem Objekt nicht von außen auch wieder unterm Hintern weggerissen werden kann und das Objekt somit auf nen Nullpointer zugreift.