【发布时间】:2014-01-25 13:10:52
【问题描述】:
试图比较 Auto 变量与 Object 引用变量 并且程序在主端被击中。这是因为*ip 但我无法理解构造函数/析构函数调用以及为什么在auto objA = objR; 时不创建新对象
我写的代码如下:
#include <iostream>
#include <string>
using namespace std;
typedef class auto_type_test
{
string name;
int age; int * ip;
public:
auto_type_test(const char* _name, int _age) : name(_name),age(_age){cout << "Constructor called"<<endl;ip= new int[2];}
auto_type_test() {}
~auto_type_test() {cout << "Destructor called"<<endl;delete []ip;}
friend ostream& operator <<(ostream& out, const auto_type_test& obj);
}MYtest;
ostream& operator <<(ostream& out, const MYtest& obj)
{
out << "Name:"<<obj.name<<" Age:"<<obj.age<<endl;
out << obj.ip[0] <<endl; // int pointer to test that auto variable not created
return out;
}
int main()
{
MYtest obj("OriginalObject",26);
MYtest& objR = obj;
auto objA = objR;
cout << obj << objR << objA << endl;
objR = MYtest("refmodified",1); //<line1>Commenting this and below line
//objA = MYtest("automodified",2); //<line2>alternatively
cout << obj << objR << objA << endl;
return 0;
}
当 Line1 评论输出时:
Constructor called
Name:OriginalObject Age:26
-842150451
Name:OriginalObject Age:26
-842150451
Name:OriginalObject Age:26
-842150451
Constructor called
Destructor called
Name:OriginalObject Age:26
-842150451
Name:OriginalObject Age:26
-842150451
Name:automodified Age:2
-17891602
Destructor called
当 Line2 评论输出时:
Constructor called
Name:OriginalObject Age:26
-842150451
Name:OriginalObject Age:26
-842150451
Name:OriginalObject Age:26
-842150451
Constructor called
Destructor called
Name:refmodified Age:1
-17891602
Name:refmodified Age:1
-17891602
Name:OriginalObject Age:26
-842150451
Destructor called
Destructor called
【问题讨论】:
-
注意:在 c++ 中定义类是没有意义的。
-
谢谢@KarolyHorvath
标签: c++ constructor reference destructor auto