这个模板为什么有问题?如何正确编译
Why's wrong with this template? how can I compile it correctly
#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。
相关文章:
- 如何在 Mac 上正确编译C++,当它在 Linux 上编译没有问题时?
- C++程序在一定行后未正确编译[cout语句]
- 如何在调试中使用Visual Studio正确编译WebRTC?
- Qt5 [make -snap] 无法正确编译:进程"/usr/bin/snap"代码 1 退出
- 这个模板为什么有问题?如何正确编译
- VS Express 无法正确编译代码(?
- 我只是想让我的代码正确编译
- 为什么在C 类构造函数的正确编译后发生运行时错误
- C++ 程序的生成文件无法正确编译
- 如何测试共享对象/共享库已正确编译
- 如何使用 Makefile 正确编译带有标头的C++
- 生成文件无法正确编译
- 在 iOS 项目中添加C++库将无法正确编译
- 如何正确编译和运行Windows表单应用程序
- 是否存在有效的C代码无法使用g++正确编译的情况
- 添加输出文件后C++代码无法正确编译
- 如果 qrc 资源被正确编译到二进制文件中,它们会在哪里丢失
- 如何正确编译/链接Linux Makefile中的单元测试
- C++代码未正确编译
- 我的函数无法正确编译