cycle_ptrs.h revision 116680a4aac90f2aa7413d9095a592090648e557
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 10namespace blink { 11 12class B; 13class C; 14class D; 15class 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 22class A : public GarbageCollected<A> { 23public: 24 virtual void trace(Visitor*); 25private: 26 Member<B> m_b; 27}; 28 29class B : public GarbageCollectedFinalized<B> { 30public: 31 virtual void trace(Visitor*); 32private: 33 Member<A> m_a; 34 RefPtr<C> m_c; 35}; 36 37class C : public RefCounted<C> { 38private: 39 OwnPtr<D> m_d; 40}; 41 42class D { 43private: 44 Vector<OwnPtr<E> > m_es; 45}; 46 47class E { 48private: 49 Persistent<A> m_a; 50}; 51 52} 53 54#endif 55