的「複製指針」的理念,從字面上理解時,無非是多簡單的任務。
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