2017-01-30 5 views
2

모든 예제는 공공 기능을 수행했다?삭제 한정자가있는 복사 생성자를 비공개로 설정할 수 있습니까?</p> <pre><code>class X { public: X(const X&) = delete; }; </code></pre> <p>왜 그들은 단지 사용하지 않는 기본 개인들 : 나는 '삭제'키워드의 사용 발견

class X 
{ 
X(const X&) = delete; 
}; 
+0

컴파일러가이 기능을 표준 호환하지 않는다고 생각하는 이유가 있습니까? – juanchopanza

+0

'function_name() = delete;'는 C++ 11의 새로운 기능입니다. C++ 98/03을 지원하려면 사용할 수 없습니다. – NathanOliver

답변

2

deleteprivate 액세스와 마찬가지로 잘 작동합니다.

delete의 효과는 과부하 해결로 함수를 선택하면 오류가 발생하는 것입니다.

private의 효과는 클래스 또는 친구와의 오버로드 해결로 함수를 선택하면 오류가 발생하는 것입니다.

두 오류가 모두 적용되는 경우 궁극적 인 결과는 같지만 public은 액세스 권한에 대한 컴파일러 메시지가 표시되지 않도록하여 혼동을 줄 수 있습니다.

+0

삭제 된 기능을 공개하는 것이 좋습니다. https://stackoverflow.com/a/18931192/108238을 참조하십시오. 또한 Clang-Tidy는 이것을 제안합니다. – schoetbi

0

delete d 기능의 액세스는 부적절합니다. 사실, 클래스 멤버의 경우 추가 액세스 지정자 (delete:)를 추가하는 것이 더 적합했을 것입니다. 나는 그들이 그렇게하지 않은 이유가 아닌 것으로 의심한다. 그것이 비회원 기능을 위해 작동하지 않을 것이라는 것이었다.

복사 생성자와 같은 경우에는 양식을 public 섹션에 넣는 것이 더 바람직합니다. 클래스에 복사 생성자가 없다는 사실은 클래스에 대한 인터페이스를 아는 아주 중요한 사실입니다.

오류의 컴파일러 시간을 얻기 위해 특정 오버로드를 삭제 된 것으로 선언하는 내부 함수의 경우 다른 모든 오버로드와 동일한 섹션에서 함수를 선언하는 것이 좋습니다.

+0

누군가는 downvoter가 좋아하지 않은 단서가 있습니까? –