In <9vg9u2$t2n$1@news.cybercity.dk>, Mogens Hansen wrote:
> Så vidt jeg husker Scott Meyers har en beskriver af dette i en af
> bøgerne "Effective C++" og "More Effective C++".
Hmm, jeg må se at få fat i dem igen, jeg har ikke haft tiden til at få dem
ordeligt læst, og nu kommer staffen
> Kun automatisk (og statisk):
> gør "operator new" (og eventuelt "operator delete") i de forskellige
> varianter private eller protected.
Tak, men jeg er ikke sikker på jeg forstår hvorfor. Er der nævnt noget om
det i standarten ? Man bruger jo ikke new eller delete til at oprette et
automatisk objekt, eller gør man ?
> Kun heap:
> gør destructor private eller protected. Lav en statisk funktion til at
> nedlægge, eller gør klassen friend med std::auto_ptr<T>: Der findes kun
> een destructor - der kan være mange constructorer.
Se, det var primært denne her der var interessant for mig, og jeg havde
hørt dette før, men det skulle lige opfriskes.
Hvis man ikke gør classen "friend" med "auto_ptr", eller en anden "handler" vil
man så ikke kunne delete objektet ?
> #include <memory>
>
> class heap_only
> {
> public:
> heap_only(void);
>
> private: // or protected
> ~heap_only();
> friend std::auto_ptr<heap_only>;
> };
>
> int main(void)
> {
> heap_only ho1; // error: destructor not accessible
> std::auto_ptr<heap_only> ho2(new heap_only());
> }
Meget smukt, lige hvad jeg skal bruge ... kode eks. Det taler jo på mange
måder et meget tydeligt sprog
> Lad en handle-klasse eje det egentlige objekt, og lad handle-klassen
> foretage ref.counting og forwarde alle funktioner. Der er ikke noget
> run-time overhead, og man fjerner muligheden for at brugeren af klassen
> glemmer at håndtere ref.counting rigtigt.
Deligation er jo en stærk ting, man bliver af og til lidt bange for prisen
(runtime overhead), men min erfaring er at det ofte komme mange fold
igen, ved færre fejl ved det at man skjuler komplexitet
Tak for de gode detalier, jeg vil med fornyet inspiration kaste mig over
min refcounter igen
/BL