知道为什么在这种情况下使用 **

Any idea why ** is used in this case

知道为什么在这种情况下使用 ** 吗?

HRESULT CreateSolidColorBrush(
  const D2D1_COLOR_F & color,
  ID2D1SolidColorBrush** solidColorBrush
);

以上来自微软文档 https://docs.microsoft.com/en-us/windows/win32/api/d2d1/nf-d2d1-id2d1rendertarget-createsolidcolorbrush(constd2d1_color_f__id2d1solidcolorbrush)

在这种情况下使用指向指针的指针有什么好处?

(为什么不开发刚刚返回ID2D1SolidColorBrush*的函数)

1.在这种情况下使用指向指针的指针有什么好处?

因为该函数可能旨在修改一个指针,您可以传递给它的地址。

When this method returns, contains the address of a pointer to the new brush. This parameter is passed uninitialized.

它可能已被声明为对指针的引用,但用户更清楚他必须给出要修改的指针的地址,因为这将强制他执行语义。

2。为什么他们不开发刚刚返回的函数 ID2D1SolidColorBrush*?

因为函数已经returns 某物是一个状态。

If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.

分离状态和计算值是一种很好的做法。