2016-08-11 5 views
2

У меня есть структура следующего вида:глубокий указатель копия объекта структуры в C++

struct SPacket 
{ 
    unsigned char payload[260]; 
    unsigned int payloadLength; 
}; 

У меня есть объект указатель на эту структуру:

SPacket* ptrObj; 

как я могу выполнить глубокий копия ptrObj в другой объект:

SPacket obj; 
+0

Возможный дубликат [указателей - дублировать экземпляр объекта] (http://stackoverflow.com/questions/ 14050058/pointers-duplicate-object-instance) –

ответ

5

Компилятор сгенерированный конструктор копирования будет глубоко скопировать элемент массива, так что просто использовать:

SPacket obj(*ptrObj); 
+0

+1, но, вероятно, важно отметить, это верно только для массива фиксированного размера, не выделенного в куче. – user1810087

+0

Ошибка, не соответствует оператору * – jaycode

+0

@jaycode: Если вы получаете эту ошибку, у вас, вероятно, нет указателя :) –

2

решение очень простое: использовать конструктор копирования:

SPacket obj = *ptrObj; 

Это вызовет конструктор (неявной) копии.

+1

Так будет работать и в C, no (после добавления 'struct')? – juanchopanza

+0

@juanchopanza Я думаю, да, было бы. То, что я подразумевал под интро, заключается в том, что конструктор копирования должен быть первой мыслью – bolov

+0

Но решение также чрезвычайно просто в C. – juanchopanza

Смежные вопросы