2011-04-18 10 views
2

私の目標は、呼び出されたインスタンス化されたクラスのアドレスを返す関数を書くことです。&このインスタンス化されたクラスのアドレス?

私の最初の推測では、この

リターン&だった。しかし、これはどんな良い結果が得られていません。

すべてのご提案をいただければ幸いです。ありがとう!

答えて

6

return thisは、そのオブジェクト内からオブジェクトのアドレスを返します。

+0

ハハ、簡単にできなかった!ありがとう!私はそれがコピーによってインスタンス化されたクラスを返すと思ったが、それは明らかに意味をなさない。 – icz

+0

あなたはすでにこれを考えていたと思いますが、 'this-> function()'を実行すると、ポインタを表す 'this'は意味を持ちます。 –

1

これはポインタです。あなたはこのポインタのアドレスを望んでいません、あなたはそれが欲しいです。

仮想継承(仮想基本クラス、多重継承)の下では、このポインタは常に同じではないことがあります(継承グラフのどこで特定の時点を指しているかによって異なります) 。

まあ定義の変換は、ちょうど(私はそれもコンパイラに依存だと思うあなたは盲目的に

MultiplyDerived* d = &someInstance; 
Base* b = d; 

bool test = ((void*) b) == ((void*) d); 

testは常に真である必要がないことを信じてはならないと言って、(dynamic_castを)ので、そこには解決できない問題が存在しませんつまり実装時に何が起こるか)

+0

' this'はアドレスも持っていません、それはrvalueです。 – fredoverflow

+0

@Fred:そうですね、これは私が言葉で言いたいことです。私は実際には 'これはアドレスであるとは言えませんでした:)(実際には、少なくともコンパイラはカバーされていません。今度は 'メンバ関数ポインタ'のために...それは似たような話です:これはアドレスではなく、通常はそのようにも実装されていません。 – sehe

関連する問題