这个模板为什么有问题?如何正确编译

Why's wrong with this template? how can I compile it correctly

本文关键字:何正确 编译 有问题 为什么      更新时间:2023-10-16
#include "test.h"
template<typename T>
test<T>::test(const T &elem):data(elem)
{
}
template<typename T>
test<T>::~test()
{
delete data;
}
template<typename T>
class test
{
private:
T data;
public:
test(const T &elem);
~test();
};
#include"test.h"
int main()
{
test<int> a(2);
}

类和实现以及主要函数都是我写在不同的文件中的,当我尝试编译它时,编译器会报告错误,但我找不到问题所在。

你的析构函数如下:

template<typename T>
test<T>::~test()
{
delete data;
}

假设data是一个指针。由于它被声明为类型T这意味着你不能用类型实例化它int可能是int *最接近的类型,但是你的构造函数没有多大意义。您可能想从析构函数中删除delete语句,但是如果不看到全貌,很难说。

如果您希望在析构函数中使用delete调用,您的类成员几乎总是应该为T*类型。但是,拥有 T 类型的成员取决于您的用例,如果您这样做,则该成员将根据您实例化类的方式分配内存(调用new()并将其放在堆上或堆栈上(。在此方案中,当您对实例化的类对象调用delete()时,也会删除成员 T,或者当您的对象超出范围时,也会从堆栈中删除成员 T。