template<class Y>
operator auto_ptr_ref<Y>() throw() {
return auto_ptr_ref<Y>(release());
}
표준 라이브러리에서 auto_ptr 클래스 구현의 일부입니다.auto_ptr에 대한 질문입니다
이것은 무엇을 의미합니까?
"연산자"와 "()"사이에 "auto_ptr_ref"가있는 이유는 무엇입니까?
template<class Y>
operator auto_ptr_ref<Y>() throw() {
return auto_ptr_ref<Y>(release());
}
표준 라이브러리에서 auto_ptr 클래스 구현의 일부입니다.auto_ptr에 대한 질문입니다
이것은 무엇을 의미합니까?
"연산자"와 "()"사이에 "auto_ptr_ref"가있는 이유는 무엇입니까?
auto_ptr에서 auto_ptr_ref로 캐스팅하는 변환 연산자입니다. <Y>.
왜 변환 연산자가 해당에 발생하는지 알려 드리겠습니다. 음,이 예를 살펴 :
struct A;
struct B {
explicit B(A&a):a(a){ }
A &a;
};
struct A {
A() { }
A(B b){ move_from(a); }
A(A &a) { move_from(a); }
operator B() { return B(*this); }
void move_from(A &a) {
std::cout << "A::A(@" << &b.a << ")" << std::endl;
}
};
int main() {
A a = A();
}
우리는 우리의 클래스 A에 대한 이동의 의미를 가지고 자사의 복사 생성자에서, 우리는 다른 인스턴스에서 멀리 몇 가지 물건을 "훔쳐"할. auto_ptr의 경우, 그것은 관리되는 포인터입니다. 대신 우리는 단지 메시지를 출력합니다. '사람들은 할 수
A(A const& a) {
/* oops, a is const, we can't steal something from it! */
}
우리가 A(A &a)
에, 우리는에 의해 값/일시 A로부터 구성 할 수 없음을 변경한다면 : 중요한 것은 우리가 보통의 복사 생성자를 사용할 수 있다는 것입니다 t는 참조 - 투 - nonconst에 바인딩 :
A(A &a) {
}
...
A a = A(); // fail, because A &a = A() doesn't work
auto_ptr은 우리의 클래스는 A의 값으로/정지 임시직에 호출 할 수있는 멤버 함수를 nonconst 트릭을 사용합니다. 즉 우리는 또한 작성한 수 있습니다 :
struct A {
...
B get_b() { return B(*this); }
...
};
...
A a = A().get_b();
을하지만 그 작품, 우리는 물론, 그 신경 쓰고 싶지 않다. A()
또는 A
by-value를 반환하는 함수의 반환 값을 할당하면됩니다. 따라서 auto_ptr과 A 클래스가 사용하는 변환 연산자는 A가 B로 변환 될 때 우리가 임시로 만든 B를 사용하여 A 인스턴스를 생성 할 수 있다는 것을 자동으로 계산합니다.
캐스트 연산자는 변환 연산자와 동의어입니다. –
@Dean Michael : 감사합니다. C'isms를 깨뜨리기가 어렵습니다. – user7116