您好我想知道如何将C ++中的2d数组指针的内容复制到另一个位置并设置另一个指针,这样当我对复制的指针进行更改时,原始数据没有任何反应?
基本上是一个指向棋盘上棋子的数组指针。所以它就像Piece * oldpointer = board[8][8]
。现在我想复制这个指针中的所有内容,包括像getvalue(), getcolor()
等在Pieces头文件中的方法到另一个位置,并设置指向它的指针,这样我就可以在那里进行操作并测试它而不必影响它这个原始数据?我读过某个地方我必须使用allocate()
,但我不确定。请帮忙
答案 0 :(得分: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;
答案 1 :(得分:1)
由于您使用的是C ++,为什么不为Piece类定义复制构造函数?然后只是
Piece copied_piece(*board[8][8]);
如果你的班级是POD,你甚至可以使用默认的复制构造函数。
答案 2 :(得分:0)
您可以通过在目的地分配内存然后进行memcopy来复制
dest_pointer = (<<my type>>*) malloc(sizeof(<<my type>>);
memcpy(dest_pointer, src_pointer, sizeof(<<my type>>);
顺便说一句,这些方法永远不会被复制。它们不属于某个对象。