假设我想让类的成员变量成为指向调用类时将给出的类型的指针。我该怎么做呢?这是我到目前为止所做的。
#include <cstdio>
template <typename T>
class myClass {
T* ptr;
public:
myClass(int size);
};
template <typename T>
myClass<T>::myClass(int size)
{
*ptr = new T(size);
}
int main(int argc, char* argv[])
{
myClass<int> instance(5);
return 0;
}
当我在构造函数中取消引用指针时,我收到以下错误:
error: invalid conversion from ‘int*’ to ‘int’
这让我相信类中所谓的指针变量不是指针。如何使它成为实例化类时用户传递的任何类型的指针?
答案 0 :(得分:3)
*ptr = new T(size);
表达式*ptr
的类型为T
,而不是T*
。
写下这个:
ptr = new T(size);
但是我想,你也不是那个意思。您可能意味着:
ptr = new T[size];
了解(size)
和[size]
之间的区别。
但是,如果您的意思是[size]
,那么您应该更喜欢std::vector<T>
而不是T*
或者,如果您真的想要(size)
,那么请使用T
代替T*
。如果确实需要指针,请std::unique_ptr<T>
。
答案 1 :(得分:0)
应为ptr = new T[size]
。 new T[size]
的类型为int*
。
答案 2 :(得分:0)
使用这样的代码:
template <typename T>
myClass<T>::myClass(int size)
: ptr(new T[size])
{
}
template <typename T>
myClass<T>::~myClass()
{
delete [] ptr;
}