SmartPointersを手に入れたので、私はDumbPointersを試してみることにしました.DumbPointersは、デストラクタで "delete"を呼び出すことは非常に難しい作業です。 、それが引き起こす「おそらくそれはポインタや適切なポインタではないのか?」の未定義の理由から次の理由でプログラムがハングアップすることがありますか?
DumbPointer<char> dumbPointer = "Hello World\0";
:DumbPointerを使用して、SmartPointerに配列を格納する私のテストを継続することを決定、私は前のエラーをリコールし、これを試してみましたハングするプログラム。当然、私はその問題を解決するための目で、理由を知りたいと思います。 (私はあなたを再保証してみましょう:デストラクタが呼び出された)私は今、以下ひどく複雑なDumbPointerコード(多分私は眠りに行く必要があります)を提供します
#pragma once
#include "stdafx.h"
template <typename T> class DumbPointer
{
private:
T* myPtr;
public:
T* Value() { return myPtr; }
DumbPointer(const DumbPointer<T>& a)
{ throw new "No assignments between DumbPointer."; }
DumbPointer(T* ptr) { myPtr = ptr; }
DumbPointer(T value) { myPtr = &value; }
~DumbPointer() { delete myPtr; }
operator T*() { return myPtr; }
T* operator ->() { return myPtr; }
};
あなたの実際の質問から話題はありませんが、ここにヒントがあります。置き換え 'DumbPointer(const DumbPointer&a) {throw new" DumbPointer間の割り当てなし "; } 'と '民間: DumbPointer(constのDumbPointer & a); // DumbPointersがcopied'されない場合があり (あなたがメソッドを宣言し、それを定義しない場合(それに体を与えません)、そのメソッドを使用しようとしないとコードがコンパイルされますが、そのコードを使用しようとするとコンパイルが失敗します)。 基本的には、「コピー禁止」の制限をコンパイル時のエラーに変更するのではなく、実行時エラーです –
ありがとう;意味があります –