bob*_*obo 0 c++ construction factory
在很多C++ API(基于COM的那些)中为你创造了一些东西,指向构造对象的指针通常需要作为**指针(并且函数将为你构造和初始化)
您通常会看到以下签名:
HRESULT createAnObject( int howbig, Object **objectYouWantMeToInitialize ) ;
Run Code Online (Sandbox Code Playgroud)
- 但您很少看到新对象作为返回值传递.
除了想要查看错误代码的人,这是什么原因?是否更好地使用**模式而不是返回的指针来实现更简单的操作,例如:
wchar_t* getUnicode( const char* src ) ;
Run Code Online (Sandbox Code Playgroud)
或者这更好地写成:
void getUnicode( const char* src, wchar_t** dst ) ;
Run Code Online (Sandbox Code Playgroud)
我能想到的最重要的事情就是记住释放它,并且由于**某种原因,这种方式往往会提醒我,我也必须解除它.
jal*_*alf 11
"除了想要错误代码"?
是什么让你觉得是一个除了.错误代码几乎是唯一的原因.该功能需要某种方式来指示失败.C没有异常,因此它必须通过指针参数或返回值来执行此操作,并且返回值是惯用的,并且在调用函数时更容易检查.
(顺便说一下,没有通用规则**意味着你必须释放对象.情况并非总是如此,使用任意的东西提醒你要清理哪些对象可能是个坏主意.)