C++复制指针
嗨,我想知道如何我可以将C++中的2d数组指针的内容复制到另一个位置并设置另一个指针,以便当我对复制的指针进行更改时,原始数据不会发生任何变化?C++复制指针
基本上它是一个棋盘上棋子的数组指针。所以它就像Piece * oldpointer = board[8][8]
。现在我想复制这个指针中的所有内容,包括诸如getvalue(), getcolor()
等这些在Pieces头文件中的内容到另一个位置并设置一个指向它的指针,这样我就可以在那里执行操作并测试它,而不必影响这个原始数据?我读了一个地方,我不得不使用allocate()
但我不知道。请帮助
您可以通过在目的地分配内存复制,然后MEMCOPY
dest_pointer = (<<my type>>*) malloc(sizeof(<<my type>>);
memcpy(dest_pointer, src_pointer, sizeof(<<my type>>);
顺便说一句,该方法不会被复制。他们不属于一个对象。
不要忘记包括
'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;
还有std :: vector,它在任何地方都受支持。 – StilesCrisis 2011-05-11 05:23:53
'std :: vector'动态分配内存。在国际象棋中,我知道有固定的棋盘大小,所以在'std :: vector'中不需要。 – 2011-05-11 07:22:51
你是对的,但鉴于OP显然是新手,将他指向高级或新引进的Boost或TR1等库可能不是他学习的最佳方式。我怀疑矢量对于他的目的来说绰绰有余,而且它在任何地方都有很好的文档记录。 – StilesCrisis 2011-07-26 00:11:59
由于您使用C++,为什么不定义你的作品类的拷贝构造函数?然后只是
Piece copied_piece(*board[8][8]);
如果你的类是POD,你甚至应该能够通过默认的拷贝构造函数来获得。
虽然董事会是他想要复制的东西...... 8-) 假设你有一个有8x8块的板级,那么你可以做这样的事情:Board a; ...董事会b(a);数组应该隐藏在板子内部,并且所有的访问都通过一个Piece get(int x,int y);来完成。 – 2012-01-02 05:56:18
解决方案是讨论[这里](http://*.com/questions/4810664/how-do-i-use-arrays-in-c/4810676#4810676),看看“转换”(约3页面向下)。 – fredoverflow 2011-05-11 11:38:45