2017-04-20 3 views
2
class class1 
{ 
private: 
    class1() = delete; 
public: 
    class1(int a) {} 
}; 

class class2 
{ 
    class1 obj; 
}; 

위의 내용은 VS2015 업데이트로 컴파일됩니다. 3 또한 삭제 된 개인 생성자를 만듭니다. 둘 중 하나가 이미 오류 메시지를 작성해야합니다. 내가 여기서 무엇을 놓치고 있니?C++에서 삭제 된 개인 생성자를 호출 할 수있는 이유는 무엇입니까?

+1

'main'에'class2 foo;'를 추가하십시오. – NathanOliver

+1

실제로 [class2' 인스턴스를 인스턴스화하려고 시도 했습니까] (http://ideone.com/i9gRrC) 어딘가에 있습니까? – WhozCraig

+5

개인 삭제 된 생성자를 호출하려는 것이 아무것도 표시되지 않습니다. – aschepler

답변

8

나는 또한 삭제되는 개인 생성자를 만들고 있습니다.

아무 문제가 없습니다.

둘 중 하나는 이미 오류 메시지를 생성해야합니다.

아니요.

왜 C++에서 삭제 된 개인 생성자를 호출 할 수 있습니까?

당신은 할 수 없습니다.

무엇이 여기에 있습니까?

전화.

이 프로그램의 아무 것도 아무것도 초기화하지 않으므로 실패 할 것이 없습니다. 이제

중 하나를 다음을 시도해보십시오 :

int main() 
{ 
    class1 obj; 
} 
//---- 
int main() 
{ 
    class2 obj; 
} 

중 & hellip을; 스파크가 날아가는 것을 지켜보십시오.

0

여기서 잊고있는 것은 클래스는 객체의 청사진입니다. 그 안에 class1 회원을 가진 class2을 만들면 실제로 호출하지 않은 것입니다. 이는 실제 실행 코드가 아니라 단순한 청사진입니다. class2을 인스턴스화하려고하면 오류가 발생합니다.