#include<iostream>
using namespace std;
class Animal
{
private:
string name;
public:
Animal()
{
cout << "Animal created" << endl;
}
Animal(const Animal& other):
name(other.name){
cout << "Animal created by copying" << endl;
}
~Animal()
{
cout << "Animal destroyed" << endl;
}
void setName(string name)
{
this->name = name;
}
void speak()const{
cout << "My name is: " << name << endl;
}
};
Animal createAnimal()
{
Animal a;
a.setName("Bertia");
return a;
}
int main()
{
Animal a_= createAnimal();
a_.speak();
return 0;
}
我得到了输出:
Animal created
My name is: Bertia
Animal destroyed
这里调用的“Animal created”构造函数是针对哪个对象a或a_以及析构函数。它是用于在我们定义Animal a或何时定义的 我们为a_调用createAnimal()同样适用于析构函数,何时在a_的main函数结束后或者在createAnimal()函数结束后调用?
答案 0 :(得分:3)
现在我的问题是&#34; Animal created&#34;构造函数是针对哪个对象a或a_以及析构函数是针对哪个对象a或a_?
两者。这里不需要两个对象。
还请解释如何创建对象的过程以及复制构造函数的机制,即如何调用和销毁对象。
该对象在createAnimal
中创建并返回main
,其中a_
变为relativeLayoutSign.removeView();
relativeLayoutSign.addView(signatureView);
。不需要复制构造,因为可以通过延长临时的寿命来省略它。
C ++标准特别允许此优化,这是允许更改正确代码行为的极少数情况之一。
答案 1 :(得分:0)
你可以添加更多的couts来查找。例如。像这样的东西:
Animal createAnimal()
{
std::cout << " creation of a " << std::endl;
Animal a;
a.setName("Bertia");
std::cout << " returning from createAnimal " << std::endl;
return a;
}
int main()
{
std::cout << " calling createAnimal() " << std::endl;
Animal a_= createAnimal();
std::cout << " calling a_.speak() " << std::endl;
a_.speak();
std::cout << " returning from main " << std::endl;
return 0;
}