#include struct connection_info { }; struct data_packet { }; struct connection_handle { void send_data(data_packet const&) {} data_packet receive_data() { return data_packet(); } }; struct remote_connection_manager { connection_handle open(connection_info const&) { return connection_handle(); } } connection_manager; class X { private: connection_info connection_details; connection_handle connection; std::once_flag connection_init_flag; void open_connection() { connection = connection_manager.open(connection_details); } public: X(connection_info const& connection_details_) : connection_details(connection_details_) { } void send_data(data_packet const& data) { std::call_once(connection_init_flag, &X::open_connection, this); connection.send_data(data); } data_packet receive_data() { std::call_once(connection_init_flag, &X::open_connection, this); return connection.receive_data(); } }; int main() { }