Любая идея, почему ** используется в этом случае - PullRequest
1 голос
/ 05 апреля 2020

Есть идеи, почему ** используется в этом случае?

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

Выше приведено в документации Microsoft https://docs.microsoft.com/en-us/windows/win32/api/d2d1/nf-d2d1-id2d1rendertarget-createsolidcolorbrush (constd2d1_color_f__id2d1solidcolorbru sh)

В чем преимущество использования указателя на указатель в этом случае?

(Почему они не разработали функцию, которая только что вернула ID2D1SolidColorBru sh*)

1 Ответ

1 голос
/ 05 апреля 2020

1. В чем преимущество использования указателя на указатель в этом случае?

Поскольку эта функция, вероятно, предназначена для изменения указателя, вы можете передать его, указав его адрес.

Когда этот метод возвращает, содержит адрес указателя на новый bru sh. Этот параметр передается неинициализированным.

Возможно, он был объявлен как ссылка на указатель, но для пользователя более понятно, что он должен дать адрес указателя, который будет изменен, так как это приведет к его исполнению семанти c.

2. Почему они не разработали функцию, которая только что вернула ID2D1SolidColorBrush*?

Поскольку функция уже возвращает что-то, имеющее статус.

Если этот метод завершается успешно, он возвращает S_OK. В противном случае возвращается код ошибки HRESULT.

Разделение состояния и вычисленного значения является хорошей практикой.

...