Kopie trotz Refrenz



  • Warum kann der Compiler hier die nötigen Sachen für eine Kopie generieren?

    class NoCopy
    {
    public:
    	NoCopy(int &ref)
    		: var(ref)
    	{
    
    	}
    
    private:
    	//NoCopy(const NoCopy&);
    	//void operator=(const NoCopy&);
    
    	int &var;
    };
    
    int main()
    {
    	int x = 3;
    
    	NoCopy np(x);
    	auto cp = np;
    }
    

    Ich dachte mit der Referenz würde es implizit nicht gehen, weil sowas geniert werden müsste:

    NoCopy(const NoCopy &other)
    {
    	var = other.var;
    }
    

    Laut generiertem Assemblercode kopiert er aber einfach var.



  • KN4CK3R schrieb:

    Ich dachte mit der Referenz würde es implizit nicht gehen, weil sowas geniert werden müsste:

    NoCopy(const NoCopy &other)
    {
    	var = other.var;
    }
    

    Laut generiertem Assemblercode kopiert er aber einfach var.

    Ja, das geht ja auch, da folgender Code erzeugt wird:

    NoCopy(const NoCopy &other)
    : var(other.var)
    {
    }
    

    Was vollkommen legal ist.
    Problematisch wirds nur mit operator=.



  • Ok, ich dachte auch beim Kopierkonstruktor würde der Compiler ein Problem sehen. Danke dir.


Anmelden zum Antworten