私のC ++の知識は最小限です。このため、私はこれを求めています:
タイプのオブジェクトへのポインターがあり、Ndb
これを行います:
Ndb* myObj=new Ndb();
NdbError err=myObj->getNdbError();
//Do some work;
//Finish the job
delete(myObj);
メソッドのシグネチャgetNdbError
は次のとおりです。
const NdbError& getNdbError() const
署名によると、誰がメモリを解放する必要がありNdbError
ますか? const
前は、NdbError&
結果しか読めず、他に何もすべきではないことを意味しますか? 割り当てられているが参照されていないメモリ領域を残したくありません。
編集: ansersによると、このユースケースをもっと見せたほうがいいです。C++ オブジェクトと C メソッドの間にラッパーがあります。
void* WINAPI new_Ndb(void* cluster_connection,const char* catalogname,const char* schemaName)
{
Ndb_cluster_connection* co=(Ndb_cluster_connection*)cluster_connection;
Ndb* tmpN=new Ndb(co,catalogname,schemaName);
return (void*)tmpN;
}
void WINAPI Ndb_dispose(void* obj)
{
delete (Ndb*)obj;
obj=0;
}
const ndberror_struct WINAPI Ndb_getNdbError(void* obj)
{
Ndb* tmp=(Ndb*)obj;
NdbError res=tmp->getNdbError();
ndberror_struct tmpRes;
tmpRes=(ndberror_struct)res;
return tmpRes;
}
NdbError は演算子のオーバーロードを定義します:
operator ndberror_struct() const {
ndberror_struct ndberror;
ndberror.status = (ndberror_status_enum) status;
ndberror.classification = (ndberror_classification_enum) classification;
ndberror.code = code;
ndberror.mysql_code = mysql_code;
ndberror.message = message;
ndberror.details = details;
return ndberror;
}
に電話をかけると何が表示されますか
const ndberror_struct WINAPI Ndb_getNdbError(void* obj)?
Ndberror は範囲外になりますが、コピーされるためデータを保持しますか?
戻り値 ndb_error_struct が範囲外になると、それらは解放されますmessage
かdetails
?char*