C++中用于对象构造的**习语

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没有异常,因此它必须通过指针参数或返回值来执行此操作,并且返回值是惯用的,并且在调用函数时更容易检查.

(顺便说一下,没有通用规则**意味着你必须释放对象.情况并非总是如此,使用任意的东西提醒你要清理哪些对象可能是个坏主意.)

  • 实际上你也可以用C语言进行COM编程.交叉语言设计和COM的时代意味着它缺少很多现代C++的东西,比如C++异常. (2认同)