fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct Tracer {
  5. Tracer(void)
  6. :m_name("(none)")
  7. {
  8. std::cout << "[" << m_name << "] " << __PRETTY_FUNCTION__ << std::endl;
  9. }
  10. Tracer(const std::string & name)
  11. :m_name(name)
  12. {
  13. std::cout << "[" << m_name << "] " << __PRETTY_FUNCTION__ << std::endl;
  14. }
  15. Tracer(const Tracer & other)
  16. :m_name("from " + other.m_name)
  17. {
  18. std::cout << "[" << m_name << "] " << __PRETTY_FUNCTION__ << std::endl;
  19. }
  20. Tracer & operator=(const Tracer & other) {
  21. m_name = "from " + other.m_name;
  22. std::cout << "[" << m_name << "] " << __PRETTY_FUNCTION__ << std::endl;
  23. return *this;
  24. }
  25. ~Tracer() {
  26. std::cout << "[" << m_name << "] " << __PRETTY_FUNCTION__ << std::endl;
  27. }
  28.  
  29. std::string m_name;
  30. };
  31.  
  32. struct A {
  33. A() : a( "init. list" ) {}
  34. Tracer a;
  35. };
  36.  
  37. struct B {
  38. B() {
  39. b = Tracer( "c-tor" );
  40. }
  41. Tracer b;
  42. };
  43.  
  44.  
  45. int main() {
  46. {
  47. A x;
  48. }
  49. cout << "1" << endl;
  50. {
  51. B x;
  52. }
  53. cout << "2" << endl;
  54. return 0;
  55. }
Success #stdin #stdout 0s 3432KB
stdin
Standard input is empty
stdout
[init. list]    Tracer::Tracer(const string&)
[init. list]    Tracer::~Tracer()
1
[(none)]    Tracer::Tracer()
[c-tor]    Tracer::Tracer(const string&)
[from c-tor]    Tracer& Tracer::operator=(const Tracer&)
[c-tor]    Tracer::~Tracer()
[from c-tor]    Tracer::~Tracer()
2