成员变量作为模板类型c ++的指针

时间:2013-09-12 18:12:55

标签: c++ templates pointers

假设我想让类的成员变量成为指向调用类时将给出的类型的指针。我该怎么做呢?这是我到目前为止所做的。

#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’

这让我相信类中所谓的指针变量不是指针。如何使它成为实例化类时用户传递的任何类型的指针?

3 个答案:

答案 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;
}
  1. 您应该为您的会员“ptr”提供一个值,而不是“* ptr”
  2. 根据Scott Meyers的“Effective C ++”,使用initial而不是assign。
  3. 清除你的析构函数。