#include<iostream>
#include<memory>
#include<stdio>
using namespace std;
class YourClass
{
int y;
public:
YourClass(int x) {
y= x;
}
};
class MyClass
{
auto_ptr<YourClass> p;
public:
MyClass() //:p(new YourClass(10))
{
p= (auto_ptr<YourClass>)new YourClass(10);
}
MyClass( const MyClass &) : p(new YourClass(10)) {}
void show() {
//cout<<'\n'<<p; //Was not working hence commented
printf("%p\n",p);
}
};
int main() {
MyClass a;
a.show();
MyClass b=a;
cout<<'\n'<<"After copying";
a.show();//If I remove copy constructor from class this becomes NULL(the value of auto_ptr becomes NULL but if class has copy constructor it remains same(unchanged)
b.show();//expected bahavior with copy construcotr and withought copy constructor
}
問題をより具体的にする: 現在、クラスにはコピー コンストラクターがあるため、a.show() によって出力される auto_ptr の値に問題はありません (2 回目に呼び出されたとき)。初期化されたときと同じままです)。それは変わらないままです。クラス MyClass からコピー コンストラクターを削除すると、(2 回目に呼び出されたときに) a.show() によって出力される auto_ptr の値は NULL になります。