ý tưởng về "sao chép một con trỏ", khi hiểu theo nghĩa đen, là không có gì hơn một phân công đơn giản.
int x = 5;
int* p1 = &x;
int* p2 = p1; // there, we copied the pointer.
Trong trường hợp này, cả hai p1
và p2
điểm đến cùng một dữ liệu - các int
biến x
. Tuy nhiên, bởi vì điều này rất tầm thường, tôi có xu hướng nghĩ rằng những gì bạn thực sự là đang hỏi về cách sao chép dữ liệu mà con trỏ trỏ đến.
Trong trường hợp này, nó phụ thuộc vào loại dữ liệu. Nếu con trỏ trỏ đến một bộ đệm đơn giản của PODs, điều này liên quan đến việc phân bổ một bộ đệm riêng biệt, và sau đó sử dụng một cái gì đó như memcpy
(hoặc tốt hơn là std::copy
) để sao chép dữ liệu. Ví dụ:
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
Hoặc, bạn có thể sử dụng memcpy
để sao chép các bộ đệm byte-by-byte, vì bộ đệm chứa PODs.
memcpy(p2, p1, 100 * sizeof(int));
Tuy nhiên, nếu nhọn để dữ liệu là không một bộ đệm đơn giản, nhưng thay vì một đối tượng C++, bạn có thể không sử dụng memcpy
. Bạn cần phải thực hiện một bản sao sâu của đối tượng, (thường sử dụng hàm tạo bản sao của đối tượng) để nhận bản sao của đối tượng. Làm thế nào điều này được thực hiện, hoặc cho dù nó thậm chí có thể, phụ thuộc vào đối tượng. (Một số đối tượng không thể sao chép được.)
tôi không có đầu mối những gì một jfloat
, nhưng nếu đối tượng là, ví dụ, một std::string
, bạn sẽ chỉ làm điều gì đó như:
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
Trong ví dụ giả tạo này nó sẽ là thích hợp hơn để tránh phân bổ đống hoàn toàn, và chỉ sử dụng các biến stack. Nhưng nó thể hiện ý tưởng sao chép một đối tượng phân bổ đống.
Bạn đã phân bổ không gian cho các đỉnh? Bạn nên đã thực hiện một calloc hoặc malloc trước một nơi nào đó. – SRM
Bạn có ý gì khi sao chép một con trỏ? Chỉ cần sao chép giá trị (địa chỉ) hoặc tạo một bản sao nội dung của bất kỳ thứ gì được trỏ tới? –
Tôi muốn sao chép các giá trị từ 'verticesLocal' sang' vertices'. – VansFannel