0

嗨,我想知道如何将 C++ 中的二维数组指针的内容复制到另一个位置并设置另一个指向它的指针,这样当我对复制的指针进行更改时,原始数据不会发生任何变化?

基本上它是一个指向棋盘上棋子的数组指针。所以它是这样的Piece * oldpointer = board[8][8]。现在我想复制这个指针中的所有内容,包括getvalue(), getcolor()Pieces 头文件中的诸如 etc 之类的方法到另一个位置并设置一个指向它的指针,这样我就可以在那里进行操作并测试它而不必影响这个原始数据?我在某个必须使用的地方读到过,allocate()但我不确定。请帮忙

4

3 回答 3

1

在 C++ 中,您可以如下定义二维数组类型(您需要现代 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 回答