std::unique_ptr
を持つ中間オブジェクトをme
メンバにアクセスするための「OK」の方法は、me
ですか?ここrvalueデストラクタが呼び出されたか/これはokです
は、例えば
#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
Iはwho
ポインタを取得するために、複数のオブジェクトのmyobj_wrapper
を定義します。関心のあるオブジェクト(上記のstd::string
)がwho_is_this
関数で評価される前に破棄されるかどうかわかりません。 それは上記のようには見えませんが、私はこれを期待する必要がありますか?上記の解決策に落とし穴がありますか?
コード私は練習のポイントをよく理解していないことを認めなければなりませんが、これはおそらくこれがsoluti 〜に。 –
** rvalueデストラクタ**はどういう意味ですか? –
これは、 'who_is_this(myobj_wrapper(" Alice "))の動的に割り当てられたオブジェクトを意味します; who: –