I have read in C++ : The Complete Reference
book the following
Even though objects are passed to functions by means of the normal call-by-value parameter passing mechanism, which, in theory, protects and insulates the calling argument, it is still possible for a side effect to occur that may affect, or even damage, the object used as an argument. For example, if an object used as an argument allocates memory and frees that memory when it is destroyed, then its local copy inside the function will free the same memory when its destructor is called. This will leave the original object damaged and effectively useless.
I do not really understand how the side effect occurs. Could anybody help me understand this with an example ?
Here is another example. The point is that when the callee (SomeFunc) parameter destructor is invoked it will free the same object (ptr) pointed to by the caller argument (obj1). Consequently, any use of the caller argument (obj1) after the invocation will produce a segfault.
That passage is probably talking about this situation:
Now
A
object is used as pass by value:Here is an example:
Note that the class has a constructor and a destructor to handle the
_buffer
resource. It would also need a proper copy-constructor and assignment operator, but is such a bad design that it wasn't added. The compiler will fill those with the default implementation, that just copies the pointer_buffer
.When calling a function:
the copy constructor of
bad_design
is invoked, which will create a new object pointing to the same buffer than the one passed as an argument. As the function returns, the local copy destructor will be invoked which willdelete
the resources pointed by the variable used as an argument. Note that the same thing happens when doing any copy construction: