我在stackoverflow的聊天区问了以下问题。
如果您像这样创建对象,它会创建一个临时对象,然后调用赋值运算符将临时对象分配给 obj 对象吗?
Object obj = Object( "Chris", 27 );
有人告诉我它只是调用构造函数。
但是,当我运行代码时,控制台会打印出在下一行调用了 dtor,这意味着构造了一个临时的,这一定意味着赋值运算符被调用得太正确了?
所以如果这是真的那么这是否意味着像这样编写你的构造函数
Object obj( "Chris", 22 );
实际上运行得更快,因为您避免使用临时 ctor 和 dtor 以及赋值运算符。当我像上面那样运行代码时,没有 dtor 字符串会打印到控制台,直到函数结束。因此,似乎没有创建临时代码,并且我的代码将更有效地运行。
class Object
{
public:
Object()
{
mSize = 0;
}
Object( string & name, int size )
:
mName(name),
mSize(size)
{
}
~Object()
{
cout << "Object Dtor called" << endl;
}
string mName;
int mSize;
};