临时对象问题
以下是两段代码:
代码1:
#include <iostream>using namespace std;class Point {private: int x; int y;public: Point(int, int); Point(const Point &); ~Point(); Point operator =(Point);};Point::Point(int i, int j){ x = i; y = j; cout<<"调用一般构造函数"<<endl;} Point::Point(const Point & p){ x = p.x; y = p.y; cout<<"调用拷贝构造函数"<<endl;}Point::~Point() { cout<<"调用析构函数"<<endl; }Point Point::operator =(Point p){ x = p.x; y = p.y; cout<<"重载赋值运算符函数"<<endl; return (*this);}int main( ){ Point pa(20, 35), pb(10, 10); cout<<endl; pa = pb; cout<<endl; return 0;} #include <iostream>using namespace std;class Point {private: int x; int y;public: Point(int, int); Point(const Point &); ~Point(); Point operator =(Point);};Point::Point(int i, int j){ x = i; y = j; cout<<"调用一般构造函数"<<endl;} Point::Point(const Point & p){ x = p.x; y = p.y; cout<<"调用拷贝构造函数"<<endl;}Point::~Point() { cout<<"调用析构函数"<<endl; }Point Point::operator =(Point p){ x = p.x; y = p.y; cout<<"重载赋值运算符函数"<<endl; return (*this);}Point func(Point p){ cout<<"已经进入到func( )的函数体内"<<endl; Point temp(5, 5); return temp;}int main( ){ Point pa(20, 35), pb(1, 2); cout<<endl; pa = func(pb); cout<<endl; return 0;}
[解决办法]
可能调用情况每个编译器会有不同吧。
拷贝构造和operator=,这样写效率高很多。
Point(const Point&);
Point& operator = (const Point&);
[解决办法]
int main( ){ func(Point(Point(3,5))); return 0;}
[解决办法]
就是和构造函数不同,编译器总是会为我们合成一个析构函数的,如果你自己写了析构函数,这个自动合成的析构函数就会调用你写的析构函数。:)