Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/xpcom/threads/LeakRefPtr.h
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
3
/* This Source Code Form is subject to the terms of the Mozilla Public
4
 * License, v. 2.0. If a copy of the MPL was not distributed with this
5
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
/* Smart pointer which leaks its owning refcounted object by default. */
8
9
#ifndef LeakRefPtr_h
10
#define LeakRefPtr_h
11
12
#include "mozilla/AlreadyAddRefed.h"
13
14
namespace mozilla {
15
16
/**
17
 * Instance of this class behaves like a raw pointer which leaks the
18
 * resource it's owning if not explicitly released.
19
 */
20
template<class T>
21
class LeakRefPtr
22
{
23
public:
24
  explicit LeakRefPtr(already_AddRefed<T>&& aPtr)
25
426
    : mRawPtr(aPtr.take()) { }
26
27
138
  explicit operator bool() const { return !!mRawPtr; }
28
29
  LeakRefPtr<T>& operator=(already_AddRefed<T>&& aPtr)
30
  {
31
    mRawPtr = aPtr.take();
32
    return *this;
33
  }
34
35
163
  T* get() const { return mRawPtr; }
36
37
  already_AddRefed<T> take()
38
426
  {
39
426
    T* rawPtr = mRawPtr;
40
426
    mRawPtr = nullptr;
41
426
    return already_AddRefed<T>(rawPtr);
42
426
  }
43
44
  void release() { NS_RELEASE(mRawPtr); }
45
46
private:
47
  T* MOZ_OWNING_REF mRawPtr;
48
};
49
50
} // namespace mozilla
51
52
#endif // LeakRefPtr_h