2013-06-15 9 views
10

Oto klasa I utworzeniu:wykorzystanie usuniętych funkcji w C++

class A{ 
private: 
    // some private data members: 
    // 2 const integers 
    // 2 integers 
    // 2 const strings 
public: 
    // C'tor 
    // D'tor 
void f(const A&); 
} 

W konstruowaniu każdego obiektu tej klasy nie ma (Explicit) Dynamiczny przydział, tylko „prymitywne” typy zadań. (bez żadnych jawnych alokacji dynamicznych mam na myśli inne niż to, w jaki sposób klasa napisów obsługuje pamięć).

gdy próbuję to:

void f(const A& item){ 
    // do some thing 
*this = item; 
    // do other stuff 
} 

pojawia się następujący błąd: "stosowanie usuniętej funkcji 'a & A :: operator = (const &)'"

teraz wiem że kompilator powinien dostarczyć mi domyślnego operatora przypisania, i moje pytanie brzmi: dlaczego kompilator odwołuje się do domyślnego operatora przypisania jako usuniętej funkcji? i jak to naprawić bez ręcznego przypisywania wszystkich funkcji elementów danych?

Wielkie dzięki! Gal

Odpowiedz

21

Ponieważ masz const członków. Nie można ich przypisać, więc kompilator nie może dostarczyć operatora przypisania.

+0

duhhhhh czuję się tak głupio :) dziękuję bardzo! – nutmeg64

+4

** 12.8/23 [class.copy] ** * Domyślny operator przypisania kopiowania/przenoszenia dla klasy X jest zdefiniowany jako usunięty, jeśli X ma: [...] niestatyczny element danych typu const, który nie jest klasą (lub ich tablica). * Zobacz ten sam akapit dla innych przypadków. – syam

+0

@ Gal B. W przeciwieństwie do ciebie, czuję, że ludzie w standardzie C++ i dostawcy kompilatorów są głupi w tym punkcie, a nie ty. Diagnostyka nie jest pomocna i wprowadza w błąd, a termin "usunięta funkcja" w standardzie jest bezsensowny. Jeśli funkcja istnieje, nie jest usuwana. Czy twój system operacyjny kiedykolwiek Ci powiedział, nie możesz otworzyć tego pliku, to jest usunięte? Nie, mówi "nie znaleziono pliku". Funkcja jest w rzeczywistości tłumiona. Programiści nie chcą wiedzieć o funkcji, która jest jakoś tam, ale nie może być używana; chcemy diagnozy o źródłowej przyczynie, dlaczego nie możemy czegoś zrobić. – Kaz