[英]Using object and template in C++
我有一个带有模板的课程:
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实例是否正确(出于普遍性)? 如果此示例是错误的,如何纠正我的代码? 非常感谢你。
您必须通过为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 ++中,以下划线开头的名称是为实现保留的,因此我已将_obj
更改为obj_
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.