C ++复制指针

时间:2011-05-11 04:09:21

标签: c++ arrays pointers chess

您好我想知道如何将C ++中的2d数组指针的内容复制到另一个位置并设置另一个指针,这样当我对复制的指针进行更改时,原始数据没有任何反应?

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

3 个答案:

答案 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>>);

顺便说一句,这些方法永远不会被复制。它们不属于某个对象。