버퍼 메모리는 개체가 소멸 될 때 할당 해제되어야합니다.
void myfunc() {
Buffers::MyBuffer buf; // this create your object on stack
const char* data= new char[100];
datalen= readSomeData(data, 100); // not best for file, socket, etc.
buf.ParseFromArray(data, datalen); // this alocate any needed object
// by calling Buffers::SomeInternalBuffer:New
// now you may delete the data varible, is not needed
delete[] data; // called new, so call delete
...
buf.Clear(); // here the read data are lost,
// but some objects may not be deleted for future use
buf.mutable_someinternalbuffer(); // call Buffers::SomeInternalBuffer:New,
// or may not if ParseFromArray already call it
...
return; // here buf is out of scope and destroyed
// any buffers that are created by New is going to be deleted
}
release_foo 은 삭제에서 버퍼를 유지 정적 새로운 방법을 사용하려면
Buffers::SomeInternalBuffer* myfunc3() {
Buffers::MyBuffer buf; // this create your object on stack
if(buf.ParseFromArray(data, datalen))
return buf.release_someinternalbuffer(); // return object
// if ParseFromArray do not call New, method release_someinternalbuffer
// will call New and copy data from default value
// no memory deallocation for returned object, everything else will deallocate
return NULL; // same as in first example
}
내가 돈 ': 당신이 어떤
SomeInternalBuffer
하지만MyBuffer
사용release_<field>
방법을 유지해야하는 경우을 알았어. "mutable_someinternalbuffer"는 무엇을 의미합니까? –
@AlexanderGuo 이것은'someinternalbuffer'라는 필드에 대해 protobuf 컴파일러에 의해 생성 된 메소드입니다. 필드 유형에 대한 포인터를 리턴합니다. – Arpegius