malloc
allocates memory only, it doesn’t invoke constructors which can leave objects in an indeterminate state.
In C++ you should almost never use malloc
, calloc
or free
. And if possible avoid new
and new[]
as well, use object instances or vectors of instances instead.
As for your second question (which is really unrelated to the first), *(myBoxArray2).printer(23)
is wrong since the the .
selection operator have higher precedence than the dereference operator *
. That means first of all that you use the .
member selector on a pointer which is invalid, and that you attempt to dereference what printer
returns which is also wrong since it doesn’t return anything.
You want (*myBoxArray2).printer(23)
(note the location of the asterisk is inside the parentheses), which is exactly the same as myBoxArray2->printer(23)
.
Also note that myBoxArray2->printer(23)
is the same as myBoxArray2[0].printer(23)
.
solved differences between new and malloc in c++ [duplicate]