#include <iostream>
#include <memory>
using namespace std;
class CTest {
public:
CTest() : m_a(0){ };
~CTest(){
if (m_a) delete m_a;
};
void init() {
m_a = new int;
}
void setParam(int a) {
*m_a = a;
}
private:
int *m_a;
};
extern void CheckPointer(auto_ptr own);
//テスト
int main(int argc, char** argv)
{
/// ポインタを引数で渡し、コンストラクタを起動
auto_ptr p(new CTest());
/// 演算子のオーバーロードにより、このようにメンバを呼び出せる。
p->init();
p->setParam(10);
/// コピーコンストラクタが呼ばれ、
/// 所有権がかわる
CheckPointer(p);
/// 関数を抜けた時点で、CTestのデストラクタは呼ばれ、
/// m_aは、開放されている
/// よって、以下の関数の呼び出しはできない。
/// p->setParam(10);
return(0);
}
void CheckPointer(auto_ptr own)
{
/// コピーコンストラクタが呼ばれ、
/// 所有者がownに移る
/// この関数を抜ける時に、CTestのデストラクタが呼ばれる
return;
}