我的 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&
意思是我只能阅读结果而我不应该阅读其他任何东西?我不会留下一些已分配但未引用的内存区域。
编辑:根据分析,最好展示更多这个用例。我有一个 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*