• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CYCLE_PTRS_H_
6 #define CYCLE_PTRS_H_
7 
8 #include "heap/stubs.h"
9 
10 namespace blink {
11 
12 class B;
13 class C;
14 class D;
15 class E;
16 
17 // This contains a leaking cycle:
18 // E -per-> A -mem-> B -ref-> C -own-> D -own-vec-> E
19 
20 // The traced cycle from A -> B -> A does not leak.
21 
22 class A : public GarbageCollected<A> {
23 public:
24     virtual void Trace(Visitor*);
25 private:
26     Member<B> m_b;
27 };
28 
29 class B : public GarbageCollectedFinalized<B> {
30 public:
31     virtual void Trace(Visitor*);
32 private:
33     Member<A> m_a;
34     RefPtr<C> m_c;
35 };
36 
37 class C : public RefCounted<C> {
38 private:
39     std::unique_ptr<D> m_d;
40 };
41 
42 class D {
43 private:
44     Vector<std::unique_ptr<E> > m_es;
45 };
46 
47 class E {
48 private:
49     Persistent<A> m_a;
50 };
51 
52 }
53 
54 #endif
55