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将拥有一个动态分配的类型对象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 回答