[英]Return to caller not invoking constructor in C++
我正在学习复制省略并尝试了一些东西来了解它。 但是下面的代码发生了意想不到的事情:
template<typename T>
class AutoPtr
{
T* m_ref;
public:
AutoPtr(T* ref)
{
printf("Cons called\n");
m_ref = ref;
}
AutoPtr(const AutoPtr& autoPtr)
{
printf("Copy called\n");
m_ref = autoPtr.m_ref;
}
~AutoPtr()
{
delete m_ref;
}
};
class Reference
{
public:
Reference()
{
printf("Reference created\n");
}
~Reference()
{
printf("Reference deleted\n");
}
};
AutoPtr<Reference> generateRes()
{
Reference *ref = new Reference();
//Scenario 1
//AutoPtr<Reference> temp{ref};
//return temp;
//Scenario 2
return AutoPtr<Reference>{ref};
}
int main()
{
AutoPtr<Reference> obj1 = generateRes();
return 0;
}
在上面的代码中,我尝试了两种场景。
为什么场景 1 不调用 obj1 的构造函数? 是一些编译器优化吗? 我知道发生了复制省略并且没有调用复制构造函数,但为什么普通构造函数没有被调用两次?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.