0

テンプレート付きのクラスがあります:

template<class T> class MyClass {
public:
      MyClass() { _genericObj = new T; }
      ~MyClass() { delete _genericObj; }
      void doSomething() { _genericObj.do(); }
private:
      T* _genericObj;
};

そして別のクラス:

class AnotherClass {
public:
     AnotherClass(MyClass &obj) { this->_obj = obj; }
     ~AnotherClass() {  }
     doMagic() { _obj->doSomething(); }
private
     MyClass* _obj;
}

AnotherClass で角括弧なしで MyClass のインスタンスを使用するのは正しいですか (一般性のため)? この例が間違っている場合、コードを修正するにはどうすればよいですか? どうもありがとうございます。

4

1 に答える 1

0

のテンプレート パラメータを指定して具体的な型が必要かMyClassどうか、またはAnotherClassクラス テンプレートも必要かどうかを決定する必要があります。また、コンストラクターで何らかの参照を渡しているという問題もありますがMyClass、それへのポインターを初期化しようとしています。これを修正する方法は、何を達成したいかによって異なります。これらの例ではAnotherClass、動的に割り当てられた type のオブジェクトを所有していると仮定していMyClass<SomeType>ます。

class AnotherClass {
public:
     AnotherClass(MyClass<int> &obj) { this->obj_ = new MyClass<int>(obj); }
     ~AnotherClass() { delete obj_; }
     doMagic() { obj_->doSomething(); }
private
     MyClass<int>* obj_;
}

また

template <typename T>
class AnotherClass {
public:
     AnotherClass(MyClass<T> &obj) { this->obj_ = new MyClass<T>(obj); }
     ~AnotherClass() {  delete obj_;} 
     doMagic() { obj_->doSomething(); }
private
     MyClass<T>* obj_;
}

C++ では、アンダースコアで始まる名前は実装用に予約されているため_objobj_.

于 2012-07-13T17:15:38.647 に答える