Am I doing this right? This is a highly simplified version of my code:
class Logger {
public:
Logger(std::ostream) { /*...*/}
};
class Driver {
public:
Driver() : m_logger(std::cout) {}
Driver(Logger& logger) : m_logger(logger) {}
private
Logger m_logger;
};
So my class Driver has a member of type Logger. When I call the argument-less constructor Driver(), the instance of Driver creates its own instance of Logger using std::cout.
When calling Driver(Logger) the instance shall use an already existing instance of Logger passed as a reference.
The above code compiles using g++. Although I understand what happens when calling Driver(), I don’t get what happens when calling Driver(Logger). Logger has no constructor which accepts a reference on Logger as argument (“copy constructor”). So what is executed when calling Driver(Logger)?
A trivial copy constructor for
Loggeris synthesised for you, unless you declare one yourself.This is much the same as how a trivial default constructor is synthesised for you (if you don’t declare a default user-defined constructor).