オブジェクトのスタック割り当てを防ぎ、ヒープ上で「new」でのみ開始できるようにすることは可能ですか?
13161 次
6 に答える
86
これを行う1つの方法は、コンストラクターをプライベートにし、ポインターを返す静的メソッドを介した構築のみを許可することです。例えば:
class Foo
{
public:
~Foo();
static Foo* createFoo()
{
return new Foo();
}
private:
Foo();
Foo(const Foo&);
Foo& operator=(const Foo&);
};
于 2008-09-24T01:32:04.497 に答える
23
C++11の場合
class Foo
{
public:
~Foo();
static Foo* createFoo()
{
return new Foo();
}
Foo(const Foo &) = delete; // if needed, put as private
Foo & operator=(const Foo &) = delete; // if needed, put as private
Foo(Foo &&) = delete; // if needed, put as private
Foo & operator=(Foo &&) = delete; // if needed, put as private
private:
Foo();
};
于 2012-10-02T20:07:19.110 に答える
12
コンストラクターを作成してから、オブジェクトを作成するための静的ファクトリメソッドをprivate
提供できます。public
于 2008-09-24T01:31:50.443 に答える
-1
オブジェクトの抽象インターフェイスを提供するヘッダー ファイルと、ヒープ上に作成されたオブジェクトへのポインターを返すファクトリ関数を作成できます。
// Header file
class IAbstract
{
virtual void AbstractMethod() = 0;
public:
virtual ~IAbstract();
};
IAbstract* CreateSubClassA();
IAbstract* CreateSubClassB();
// Source file
class SubClassA : public IAbstract
{
void AbstractMethod() {}
};
class SubClassB : public IAbstract
{
void AbstractMethod() {}
};
IAbstract* CreateSubClassA()
{
return new SubClassA;
}
IAbstract* CreateSubClassB()
{
return new SubClassB;
}
于 2008-09-24T01:37:39.837 に答える