2

私はハッシュテーブルを扱っていて、それを再ハッシュするために、すべての値を新しいハッシュテーブルに入れ、実行中のインスタンスをこの新しいハッシュテーブルに設定しています。

それが可能かどうか確信が持てなかったので、これが事実であるかどうかを確認したいだけです。やっています:

Foo *new_foo = new Foo();
...
delete this;
this = new_foo;

それがなくても機能しないので、問題は削除行ではないことを私は知っています。これはエラーです: エラー: 代入の左オペランドとして左辺値が必要です。

また、副次的な質問として、割り当てられた配列をコピーするための最良/標準的な方法は何ですか? *a = *b? もちろん、私は C++ の初心者です。知っておくと役に立ちますが、必須ではありません。

4

3 に答える 3

2

プログラムはthis、別のオブジェクトを指すように変更することはできません。this定数ポインタ(つまり、T* const)です。

this = new_foo; // incorrect.

割り当てられたアレイをコピーするための最良/標準的な方法は何ですか?

を使用*a = *b;しても、アレイ全体がコピーされるわけではありません。の最初のインデックスの値をの最初のインデックスにコピーしているだけbですastd::copy代わりに、を使用してください。


int a[] = { 1,2,3,4,5 } ;
int b[5] ;

// To copy element of a to b -

std::copy( a, a+5, b ) ; // you need to include <algorithm> header.
于 2011-03-20T02:44:28.260 に答える
2

に割り当てることはできませんthis。新しいインスタンスを作成して返す静的メソッドを作成することを検討してください。

于 2011-03-20T02:45:06.437 に答える
0

エラーメッセージは、あなたが知る必要があることを伝えていると思います. キーワードは左辺値ではないため、this割り当てることはできません。なぜこれができないのですか?:

Foo *old_foo = ...
Foo *new_foo = new Foo();
delete old_foo;
old_foo = new_foo;

または、それが実際にハッシュ テーブルである場合は、それ自体を削除するのではなく、要素を調べてすべて削除する「空の」メソッドを作成します。

于 2011-03-20T02:39:00.303 に答える