은의 다음 코드를 살펴 보자 :C++ 11 : 개인 회원 보안
#include <iostream>
#include "mydemangled.hpp"
using namespace std;
struct A
{
private:
struct B {
int get() const { return 5; }
};
public:
B get() const { return B(); }
};
int main()
{
A a;
A::B b = a.get();
cout << demangled(b) << endl;
cout << b.get() << endl;
}
그리고 컴파일러 (GCC 4.7.2)을 A::B
이 비공개 말하는 악. 괜찮아. 그래서, 나는 코드 변경 :
int main()
{
A a;
cout << demangled(a.get()) << endl;
cout << a.get().get() << endl;
}
을하며 소리하지 않습니다
$ ./a.out
A::B
5
의미, 나는 A::B
의 인스턴스를 만들 수 없습니다,하지만 난 그것을 사용할 수 있습니다. 그래서 새 변경 (내 질문의 핵심).
int main()
{
A a;
auto b = a.get();
cout << demangled(b) << endl;
cout << b.get() << endl;
}
그리고 출력 :
$ ./a.out
A::B
5
문제가 A::B
개인 (따라서 그 생성자, 복사 생성자 등)되고, 여기에 무엇입니까?
'private'은 보안 기능이 아닙니다. –
외부에 대한 액세스/전시 보안 내 말은 –
입니다. 흥미 롭습니다. 나는 여전히'auto'로 녹슨하다. 아마도'const A :: B &'가 될 것인가? 그것이'A :: B'가되면 개인 복사 생성자에 어떻게 접근합니까? –