C++复制指针

C++复制指针

问题描述:

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

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

+0

解决方案是讨论[这里](http://*.com/questions/4810664/how-do-i-use-arrays-in-c/4810676#4810676),看看“转换”(约3页面向下)。 – fredoverflow 2011-05-11 11:38:45

您可以通过在目的地分配内存复制,然后MEMCOPY

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

顺便说一句,该方法不会被复制。他们不属于一个对象。

+0

不要忘记包括。 – Lalaland 2011-05-11 04:17:19

+0

'memcpy'只适用于POD。 – fredoverflow 2011-05-11 11:40:06

在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; 
+0

还有std :: vector,它在任何地方都受支持。 – StilesCrisis 2011-05-11 05:23:53

+0

'std :: vector'动态分配内存。在国际象棋中,我知道有固定的棋盘大小,所以在'std :: vector'中不需要。 – 2011-05-11 07:22:51

+0

你是对的,但鉴于OP显然是新手,将他指向高级或新引进的Boost或TR1等库可能不是他学习的最佳方式。我怀疑矢量对于他的目的来说绰绰有余,而且它在任何地方都有很好的文档记录。 – StilesCrisis 2011-07-26 00:11:59

由于您使用C++,为什么不定义你的作品类的拷贝构造函数?然后只是

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

如果你的类是POD,你甚至应该能够通过默认的拷贝构造函数来获得。

+0

虽然董事会是他想要复制的东西...... 8-) 假设你有一个有8x8块的板级,那么你可以做这样的事情:Board a; ...董事会b(a);数组应该隐藏在板子内部,并且所有的访问都通过一个Piece get(int x,int y);来完成。 – 2012-01-02 05:56:18