{ class Inner : public TObject { }; class Outer { Inner *inner = 0; public: Outer() { inner = new Inner(); } Outer(const Outer& other) { inner = new Inner(); } Outer& operator=(const Outer& other) { return *this; } virtual ~Outer() { delete inner; } }; TTree t; Outer *in_ptr = 0; t.Branch("TheBranch", "Outer", &in_ptr); t.Fill(); }