On Thursday 21 August 2014 16:26:06 Peter Dimov wrote:
Andrey Semashev wrote:
Why do you think it's not sensible to have a trivial default constructor/destructor for a non-copyable class?
Because it isn't. Think about it. Trivial constructors and destructors do nothing at all. A trivial constructor leaves the object uninitialized.
But it's possible I'm constrained by my lack of imagination; show me one example.
For example, an object that is supposed to be initialized by a method call. The initialization is not done in the constructor because the object is supposed to be declared in the namespace scope and not pose thread safety issues. A global mutex, for instance. Another example, a global placeholder used as an anchor for DSL expressions or something like that. Think of something similar to std::cout.
Technically, you can apply memcpy to any object and deal with the consequences.
Technically... if an object has a trivial copy constructor it's well defined to use memcpy to copy it. See 3.9/3.
Right, I'm not arguing with that.