2013-04-09 10 views
0

클래스를 복사 불가능으로 선언하는 가장 좋은 구문은 무엇입니까?

클래스가 noncopyable하고, 나는 보통 다음 구문을 참조 (나는 C++ (11)는 사용할 수 없습니다 가정) (I 명시 적으로 그 목적을 위해 설계되었습니다 boost::noncopyable를 사용할 수 없습니다 가정) :

class MyClass 
{ 
public: 
    ... 
    stuff 
    ... 

private: 
    MyClass(const MyClass&); // disables the copy constructor 
    MyClass& operator=(const MyClass&); // disables the copy assignment operator 
}; 

이 구문은 오래 지속됩니다. 나는 다음 대신 사용할 수 있다는 생각이 짧은 것 같다

MyClass(MyClass&); // disables the copy constructor 
    void operator=(MyClass); // disables the copy assignment operator 

(는 클래스의 이름을 단 3 번이 아닌 4 번 반복, 그것은 또한 const& 생략).

내 구문이 다른 구문과 완전히 똑같습니까?

다른 하나를 선호하는 이유가 있습니까?

답변

0

소스 코드를 짧게하는 것에 중점을 두는 것은 그리 좋지 않습니다. 게다가, 당신은 당신의 operator=을 읽을 수 없도록 만들고 있습니다, 더 이상 복사 - 연산자가 아닙니다 ...
당신은 몇 마디를 저장하기 위해 후자를 사용하지 마십시오. 내용의 게시물 here이 있습니다

,

// QUOTE

class MyClass 
{ 
private: 
    MyClass(const MyClass&) {} 
    MyClass& operator=(const MyClass&) {} 
}; 

당신이 C++에 입문 텍스트를 읽을 수있는 C++ 프로그래머하지만, 관용적 C++ (즉 거의 노출이있는 경우 : 많은 C++ 프로그래머), 이것은 혼란 스럽습니다. 복사 생성자 및 복사 할당 연산자를 선언하지만 비어 있습니다. 그렇다면 왜 그들을 선언해야합니까? 예, 그들은 비공개이지만 더 많은 질문 만 제기됩니다. 왜 비공개로 설정해야합니까?

복사가 금지되는 이유를 이해하려면 비공개로 선언하면 비회원/친구가 복사 할 수 없게됩니다. 이것은 초보자에게 즉시 명백하지 않습니다. 또한 복사하려고 할 때 받게 될 오류 메시지도 없습니다.

// QUOTE END