其他分享
首页 > 其他分享> > C/Cpp: dynamic vs. static constructor calls

C/Cpp: dynamic vs. static constructor calls

作者:互联网

Calling constructors in c++ without new - Stack Overflow

Q:

I've often seen that people create objects in C++ using

Thing myThing("asdf");

Instead of this:

Thing myThing = Thing("asdf");

This seems to work (using gcc), at least as long as there are no templates involved. My question now, is the first line correct and if so should I use it?

Ans:

1.

Both lines are in fact correct but do subtly different things.

The first line creates a new object on the stack by calling a constructor of the format Thing(const char*).

The second one is a bit more complex. It essentially does the following

  1. Create an object of type Thing using the constructor Thing(const char*)
  2. Create an object of type Thing using the constructor Thing(const Thing&)
  3. Call ~Thing() on the object created in step #1

2.

I assume with the second line you actually mean:

Thing *thing = new Thing("uiae");

which would be the standard way of creating new dynamic objects (necessary for dynamic binding and polymorphism) and storing their address to a pointer. Your code does what JaredPar described, namely creating two objects (one passed a const char*, the other passed a const Thing&), and then calling the destructor (~Thing()) on the first object (the const char* one).

By contrast, this:

Thing thing("uiae");

creates a static object which is destroyed automatically upon exiting the current scope.

标签:const,calls,object,dynamic,constructor,Thing,vs,new,using
来源: https://blog.csdn.net/maxzcl/article/details/122688599