的“复制指针”的理念,从字面上理解时,无非是多简单的任务。
int x = 5;
int* p1 = &x;
int* p2 = p1; // there, we copied the pointer.
在这种情况下,既p1
和p2
指向相同的数据 - 的int
变量x
。但是,因为这很微不足道,所以我倾向于认为你真正想要的是如何复制指针指向的数据。
在这种情况下,它取决于数据类型。如果指针指向一个简单的缓冲区PODs,这涉及到分配一个单独的缓冲区,然后使用类似memcpy
(或最好是std::copy
)来复制数据。例如:
int* p1 = new int[100];
// ... fill p1 with values
int* p2 = new int[100]; // create a new buffer
std::copy(p1, p1 + 100, p2); // copy the data into p2
或者,你可以使用memcpy
复制缓冲区逐字节,由于缓冲区包含PODs。
memcpy(p2, p1, 100 * sizeof(int));
然而,如果被指向的数据是不简单的缓冲,而是一个C++对象,则不能使用memcpy
。您需要执行该对象的深拷贝(通常使用该对象的拷贝构造函数)以获取对象的克隆。如何做到这一点,或者甚至可能取决于对象。 (有些对象是不可复制的。)
我不知道什么是jfloat
是,但如果对象是,例如,一个std::string
,你只是这样做:
std::string* s1; // assume this points to a valid string
std::string* s2 = new std::string();
*s2 = *s1; // copies s1 using s2's assignment operator
在这个人为的例子则最好避免堆完全分配,只使用堆栈变量。但它演示了复制堆分配对象的想法。
您是否为顶点分配空间?你应该事先做过一个calloc或malloc。 – SRM 2010-12-10 16:50:28
复制指针是什么意思?只需复制价值(地址)或制作任何指向内容的副本? – 2010-12-10 16:51:53
我想将'verticesLocal'中的值复制到'vertices'。 – VansFannel 2010-12-10 16:54:04