aboutsummaryrefslogtreecommitdiff
path: root/src/util/com_util.hpp
blob: bbaf1c2731ca98372de8dcbfd12f6d5de294cb13 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma once
#include "pre.hpp"

#include <memory>

namespace cru::util {

template <typename TInterface>
std::shared_ptr<TInterface> CreateComSharedPtr(TInterface* p) {
  return std::shared_ptr<TInterface>(p, [](TInterface* ptr) {
    if (ptr != nullptr) ptr->Release();
  });
}

template <class TInterface>
void SafeRelease(TInterface*& p) {
  if (p != nullptr) {
    p->Release();
    p = nullptr;
  }
}
}  // namespace cru::util