有没有办法让 MyClass A; A = MyClass() 无异于 MyClass A = MyClass()

有没有办法让 MyClass A; A = MyClass() 等同于 MyClass A = MyClass()
写习惯JAVA了,对JAVA的GC也有一定依赖性了,最近写C++感觉好不习惯。。

学过构造函数 知道 MyClass A; A = MyClass() 有差距 MyClass A = MyClass()
正因为这个差别,纠结。MyClass A = MyClass()不会调用析构函数,而 MyClass A; A = MyClass() 会调用到。
由于MyClass A需要先声明,之后再赋值,没法用MyClass A = MyClass()。

源码如下:

class Data{
public:
char* s;
Data(){
s = "Point()";
}
Data(int i){
s = "Point(x,y)";
}
~Data(){
printf("~Data() %d\n",this);
}
};

class Point{
public:
int x,y;
Data *data;
Point():x(0),y(0){
data = new Data();
printf("Point() %d\n",this);
}
Point(int a, int b):x(a),y(b){
data = new Data(1);
printf("Point(x,y) %d\n",this);
}
~Point(){
delete data;
printf("~Point() %d\n",this);
}
};

void main(){
Point A;
A = Point(1,2);
// 这会先在右侧构造一个临时的Point,
// 然后通过'='操作赋值给A,完成后会调用临时Point的析构函数。
// 于是,问题就是临时的析构完,A里的内容也没了。
// 而Point A = Point(1,2) 是直接构造一个Point然后把该Point称作A。
}

------解决方案--------------------
 // 于是,问题就是临时的析构完,A里的内容也没了。

这句不对吧,我怎么觉得A = Point(1,2)是拷贝构造,赋值完后A和临时对象就没关系了
------解决方案--------------------
我觉得你既然习惯java了,就别趟c++的混水了,自寻苦恼。
------解决方案--------------------
1.因为在一些情况下,即使表达式有副作用C++也允许优化,所以MyClass A = MyClass();就像只有一个对象那样.
2.LZ的问题在于对象中有裸指针,因此复制构造,赋值,构造等函数需要有特殊的处理,避免裸指针的问题,进而使得对象满足值语义.比如说要在赋值时作资源拷贝,复制构造的时候也作拷贝,而拷贝时需要释放已有资源.在大量数据的情况下可能存在性能问题.
再一个解法就是智能指针,让指针自动释放,拷贝等.但是这样的问题是两个对象指向同一个资源,可能不满足需求,这又派生出写时拷贝技术.
进一步,另外还可以参考一下移动语义.

总之呢,目测LZ的场景下直接用对象,不要用裸指针作为成员.
如果使用其它方法,需要有一定C++功力.