Ein weiterer Tipp, den ich bieten würde, ist die folgende:
Verwenden Referenzen, wenn Sie können, Zeiger, wenn Sie zu haben. Wenn das Objekt garantiert existiert, sollten Sie wahrscheinlich eine Referenz verwenden. Wenn dies nicht der Fall ist, müssen Sie wahrscheinlich einen Zeiger verwenden.
Ein weiterer Vorteil ist, dass Referenzen Mehrdeutigkeit bei der Eigentümerschaft entfernen. Sobald ein Wartungsprogrammierer einen Zeiger sieht, werden sie sich fragen, ob sie ihn löschen sollen.
prüfen dieses Beispiel aus:
// Wrapper class using a reference because the wrapped object always exists
class Wrapper
{
public:
// If the wrapped is guaranteed to exist at creation, do it this way
Wrapper(Wrapped& wrapped):_wrapped(wrapped) { /* empty */ }
// put extra methods here.
int getWrappedValue() const { return _wrapped.getValue(); }
private:
Wrapped& _wrapped; // This object always exists and is valid
};
// Wrapper class written to support a possibly non-existent wrapped object.
class Wrapper
{
public:
Wrapper(Wrapped* wrapped = 0):_wrapped(wrapped) { /* empty */
void setWrappee(WRappee* wrapped) { _wrapped = wrapped; }
int getWrappedValue() const; // Not making inline -- more complex
private:
Wrapped* _wrapped; // Always check pointer before use
};
int Wrapper::getWrappedValue() const
{
if (_wrapped)
{
return _wrapped->getValue();
}
else
{
return -1; // NOTE, this is a contrived example -- not getting into exceptions
}
}
ich sehr empfehlen Sie den Titel dieser Frage bearbeiten kräftigeren zu sein. – Benson