1 /* This testcase is part of GDB, the GNU debugger. 2 3 Copyright 2014-2020 Free Software Foundation, Inc. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 17 18 19 /* One could use unique_ptr instead, but that requires a GCC which can 20 support "-std=c++11". */ 21 22 template <typename T> 23 class smart_ptr 24 { 25 public: 26 smart_ptr (T *obj) : _obj (obj) { } 27 ~smart_ptr () { delete _obj; } 28 29 T *operator-> (); 30 31 private: 32 T *_obj; 33 }; 34 35 template <typename T> 36 T * 37 smart_ptr<T>::operator-> () 38 { 39 return _obj; 40 } 41 42 class A 43 { 44 public: 45 virtual int func (); 46 }; 47 48 int 49 A::func () 50 { 51 return 3; 52 } 53 54 int 55 main () 56 { 57 A *a_ptr = 0; 58 smart_ptr<A> a (new A); 59 60 return a->func(); /* Break here */ 61 } 62