0

こんにちは、C++ の 2D 配列ポインターの内容を別の場所にコピーし、別のポインターを別のポインターに設定して、コピーしたポインターを変更しても元のデータに何も起こらないようにする方法を知りたいですか?

基本的に、チェス盤の駒への配列ポインタです。のようになりPiece * oldpointer = board[8][8]ます。今、Piecesヘッダーファイルにあるetcのようなメソッドを含むこのポインターのすべてのコンテンツgetvalue(), getcolor()を別の場所にコピーし、ポインターを設定して、そこで操作を行い、この元のデータに影響を与えずにテストできるようにしたいですか? 使用しなければならなかった場所を読みましたallocate()が、よくわかりません。助けてください

4

3 に答える 3

1

C++ では、次のように 2D 配列型を定義できます (最新の C++ コンパイラが必要です)。

#include <array>
typedef std::array<std::array<Piece, 8>, 8> board_t;

コンパイラがサポートしていない場合は、代わりに次std::arrayを使用できます。boost::array

#include <boost/array.hpp>
typedef boost::array<boost::array<Piece, 8>, 8> board_t;

これで、上記のタイプを使用できます。ご覧のとおり、ポインターが指すオブジェクトをコピーする必要があります。

board_t* oldpointer = new board_t;

// do some with oldpointer

// now make a copy of the instance of the object oldpointer points to
// using copy-constructor
board_t* newpointer = new board_t( *oldpointer );
// now newpointer points to the newly created independent copy

// do more

// clean up
delete oldpointer;

// do more with newpointer

// clean up
delete newpointer;
于 2011-05-11T04:34:11.083 に答える
1

C++ を使用しているので、Piece クラスのコピー コンストラクターを定義してみませんか? それからちょうど

Piece copied_piece(*board[8][8]);

クラスが POD の場合は、デフォルトのコピー コンストラクターを使用することもできます。

于 2011-05-11T04:34:11.700 に答える
0

宛先にメモリを割り当ててからmemcopyすることでコピーできます

dest_pointer = (<<my type>>*) malloc(sizeof(<<my type>>);
memcpy(dest_pointer, src_pointer, sizeof(<<my type>>);

ところで、メソッドは決してコピーされません。それらはオブジェクトに属していません。

于 2011-05-11T04:11:32.090 に答える