이 같은 코드를보고 뭔가가 있습니다부스트 직렬화
struct DataStruct
{
// some fields here
};
class C1
{
public:
C1(size_t n)
{
ptrData = new DataStruct[n];
ptrPtrs = new DataStruct*[n];
for(size_t i=0;i<n;i++)
ptrPtrs[i] = &ptrData[i];
}
virtual ~C1()
{
delete[] ptrData;
delete[] ptrPtrs;
}
DataStruct* ptrData;
DataStruct** ptrPtrs;
};
을하고 부스트 :: 직렬화 바람직 직렬화 할 필요가있다. 루프에서 항목별로 항목을 저장하는 것 외에 동적으로 할당 된 배열을 저장하는 방법을 찾지 못했습니다. 그러나 두 번째 배열 - 포인터 배열을 저장하는 방법을 모릅니다. 그것은 부스트에서 더 많거나 적은 편리하게 할 수 있습니까?
음, 직렬화에 위의 대답과 같이 배열 길이를 지정할 수있는 일종의 어댑터가 있기를 바랍니다. 벡터는 옵션이 아닙니다. 왜냐하면 어떤 요소가 내부적으로 이동되지 않을지 보장하지 않기 때문에 벡터 항목에 대한 포인터를 저장할 수 없기 때문입니다. – ilya
어떤 식 으로든 벡터의 크기를 수정하지 않으면 벡터 요소가 이동하지 않으며, 앞쪽으로 예약하면 이동하지 않습니다. – CashCow
스마트 포인터의 벡터를 저장할 수도 있습니다. 벡터의 요소가 이동하더라도 포인터가 가리키는 항목은 표시되지 않으며 스마트 포인터는 유효합니다. 이 경우 shared_ptr을 사용할 수 있으며주의해야한다면 unique_ptr은 사용할 수 있지만 auto_ptr은 사용할 수 없습니다. – CashCow