Kopierkonstruktor und Operator=



  • Hallo,

    wie kann ich einen eigenen Kopierkonstruktor in meiner Klasse anbieten,
    wenn ich in meiner Klasse einen Zeiger auf ein Objekt verwende das keinen Operator= anbietet.

    Ist es möglich einen leeren Kopierkonstruktor im private Bereich meiner Klasse zu definieren und somit die Verwendung einfach zu verbieten. Das gleiche würde ich dann mit MyClass.operator=(...) machen.



  • ja, mit private den copy-ctor und den op= zu verbiten, ist eine sehr gute idee.
    meine klassen haben das fast alle.



  • Hallo volkrad,

    ist das jetzt ironisch gemeint?



  • Nein, das ist durchaus üblich.



  • Ist es möglich einen leeren Kopierkonstruktor im private Bereich meiner Klasse zu definieren und somit die Verwendung einfach zu verbieten

    Möglich ja. Aber nicht unbedingt sinnvoll. Wenn du das Kopieren verbieten willst, dann reicht es Copy-Ctor bzw. Copy-Assignment-Op im private-Bereich zu *deklarieren*:

    class Foo
    {
    public:
    //...
    private:
    // no copy, no assignment
    Foo(const Foo&);
    Foo& operator=(const Foo&);
    };
    

    Das ganze ist so verbreitet, dass boost z.B. eine eigene Klasse dafür hat:

    class noncopyable
    {
     protected:
        noncopyable() {}
        ~noncopyable() {}
     private:  // emphasize the following members are private
        noncopyable( const noncopyable& );
        const noncopyable& operator=( const noncopyable& );
    };
    

    Willst du jetzt Kopien verbieten, schreibst du einfach:

    class Foo : noncopyable
    {
    public:
        // ...
    };
    

Anmelden zum Antworten