自動ポインタは、スコープ外になると、それが指すオブジェクトに対して内部的にdeleteを呼び出します。これは、ヒープ上に作成されたオブジェクトを割り当てる場合に正常に機能します。しかし、ヒープ上に作成されていないオブジェクトを割り当てようとすると、deleteが2回呼び出されるため、クラッシュします。最初にauto_ptr自体によって、次にオブジェクトがスコープ外になると、そのデストラクタが再度呼び出されます。以下に示すように、
#include <iostream>
#include <memory>
using namespace std;
class sample
{
public:
sample() { puts("sample"); }
~sample() { puts("~sample"); }
};
int main()
{
sample sObj;
auto_ptr<sample> samplePtr(&sObj);
}
これは、auto_ptrを使用して、ヒープ上に作成されたオブジェクトのみを保持できることを意味しますか?