【发布时间】:2010-06-08 22:30:27
【问题描述】:
在许多为您制作东西的 C++ API(基于 COM 的 API)中,指向所构造对象的指针通常需要作为 ** 指针(和该函数将为您构建并初始化它)
您通常会看到如下签名:
HRESULT createAnObject( int howbig, Object **objectYouWantMeToInitialize ) ;
-- 但你很少看到新对象作为返回值被传递。
除了人们希望看到错误代码之外,这是什么原因?对于更简单的操作,使用** 模式而不是返回的指针是否更好,例如:
wchar_t* getUnicode( const char* src ) ;
或者写成这样更好:
void getUnicode( const char* src, wchar_t** dst ) ;
我能想到的最重要的事情是记住释放它,而** 方式,出于某种原因,往往会提醒我我也必须释放它。
【问题讨论】:
-
在我看来像 C。在 C++ 中,他们只是将其作为引用传递或抛出异常。
-
为什么这么多答案都集中在 COM..?这只是其使用位置的一个示例——它也用于许多其他 C-API,例如 FMOD。
标签: c++ factory construction