/* * Copyright (c) 2017-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #include class SomeStructA { public: int* ptr; std::string a_name; std::string* p_a_name; int i; SomeStructA() {} // user defined default constructor. // Does not initialize i so, it gets random value }; class SomeStructB { public: std::string a_name; int i; // No user defined default constructor. // If default constructor is called i is initialized. }; int access_members_bad() { SomeStructA a; std::string n = a.a_name; int i = a.i; // error return 0; }; int access_members_bad2() { SomeStructA a{}; std::string n = a.a_name; int i = a.i; // error return 0; }; int access_members_ok() { SomeStructB b{}; // call default implicit constructor which initialize i. std::string n = b.a_name; int i = b.i; return 0; }; int access_members_bad3() { SomeStructB b; // no constructor is called std::string n = b.a_name; int i = b.i; return 0; }; int access_pointer_members_bad() { SomeStructA a; int* p = a.ptr; int i = a.i; std::string* pn = a.p_a_name; return 0; };