當對象被銷燬時,緩衝區的內存應該被釋放。
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 爲了保持緩衝被刪除,使用靜態的新方法:如果你需要保留任何SomeInternalBuffer
但不MyBuffer
使用release_<field>
方法
Buffers::MyBuffer* myfunc2() {
Buffers::MyBuffer* buf = Buffers::MyBuffer:New();
if(buf->ParseFromArray(data, datalen))
return buf; // return object, no memory dealocation
delete buf; // something wrong with data, delete, destroy and dealocate
return NULL; // return null
}
:
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
}
我不沒有得到它。 「mutable_someinternalbuffer」是什麼意思? – 2015-08-30 01:44:54
@AlexanderGuo這是一個由protobuf編譯器爲一個名爲'someinternalbuffer'的字段生成的方法,它返回指向字段類型的指針。 – Arpegius 2015-08-30 07:58:56