여기서 I는 who
포인터를 얻기 위해 다수의 개체를 정의 myobj_wrapper
#include <iostream>
#include <memory>
/* myobj from another library */
class myobj {
public:
std::string me; /* actual member of interest is larger and more
complicated. Don't want to copy of me or myobj */
/* more members in actual class */
myobj(std::string i_am) {
/* more stuff happens in constructor */
me = i_am;
}
~myobj(){
std::cout << me << ": Goodbye" << std::endl;
}
};
/* A function in another library */
void who_is_this(std::string *who){
std::cout << "This is " << *who << std::endl;
}
/* wrapper which I define */
class myobj_wrapper {
using obj_ptr = std::unique_ptr<myobj>;
obj_ptr ptr;
public:
std::string *who;
myobj_wrapper(std::string i_am):
ptr(new myobj(i_am)), who(&ptr.get()->me) {}
myobj_wrapper(myobj &the_obj): who(&the_obj.me) { }
};
int main()
{
{
myobj bob("Bob");
who_is_this(myobj_wrapper(bob).who);
}
who_is_this(myobj_wrapper("Alice").who);
return 0;
}
생성 프로그램 수율
This is Bob
Bob: Goodbye
This is Alice
Alice: Goodbye
예를이다. 관심 대상 객체 (위의 std::string
)가 who_is_this
함수에서 평가되기 전에 파괴되는지 여부에 대해 확실하지 않습니다. 위와는 같지 않지만 이것을 예상해야합니까? 위의 해결책에 함정이 있습니까?
who_is_this(myobj_wrapper("Alice").who);
이 인수로 문자열 리터럴을 것, 래퍼 객체를 생성합니다 : 여기 잘 모르겠지만,
코드 나는 운동의 요점을 이해하지 못한다는 것을 인정해야 하겠지만, 나는 이것이 아마도 soluti 인 문제를 이해하지 못한다. ~에. –
** rvalue destructor **는 무슨 뜻입니까? –
'who_is_this (myobj_wrapper ("Alice"))에서 동적으로 할당 된 객체를 의미합니다.; –