char* 类型值的交换有关问题

char* 类型值的交换问题
我定义了一个EdgeType结构体模版
template<class T>
struct EdgeType<T>
{
     T head;
     T tail;
     int cost;
     EdgeType(T h,T t,int c)
{
head=h;
tail=t;
cost=c;
}
}
然后在实际应用的时候T是char*类型保存字符串。
现在使用一个vector里面保存了n个EdgeType<char*>类型的元素,需要给它们按照cost大小排序,我选择了冒泡排序,但是在交换第j和第j+1个元素的值的时候char*出现了问题。我重载了=运算符,使用了strcpy进行head和tail值的交换(实际这种做法应该不太好,因为实际我并不知道T是char*类型,这样做实际默认了T是char*类型,并不符合模版的定义,不知道有没有其他方法)但是这样做编译能通过,运行确出错了,下面是我的重载函数:
void operator=(const EdgeType<T> & b)
{
                strcpy(this->head,b.head);           //调试程序的时候到这里就出错了
strcpy(this->tail,b.tail);
this->cost=b.cost;
}
外部的排序的部分代码是:
if(graph[j].cost>graph[j+1].cost)
{
tmp=graph[j];
graph[j]=graph[j+1];
graph[j+1]=tmp;
}
运行出错的提示是Unhandled exception in 邻接矩阵.exe:0xC0000005:Access Violation
不知道有没有比较懂得char*的大神给些指导
------解决思路----------------------
EdgeType(T h,T t,int c)
{
head=h;
tail=t;
cost=c;
}
这构造函数就有问题,head和tail如果都是char *,怎么能用指针赋值呢?要申请内存再strcpy吧
void operator=(const EdgeType<T> & b)
{
                strcpy(this->head,b.head);           //调试程序的时候到这里就出错了
strcpy(this->tail,b.tail);
this->cost=b.cost;
}
这里也是类似的问题,head没有内存,直接用strcpy一般都会挂,还有,别忘记释放原来的内存,要不然又会有内存泄露
------解决思路----------------------
引用:
Quote: 引用:


这里也是类似的问题,head没有内存,直接用strcpy一般都会挂,还有,别忘记释放原来的内存,要不然又会有内存泄露

噢~~有道理,但是我还是有一个问题,因为书上的要求是要使用类模版,实际head类型是T类型,并不知道是char*,如果我为head 成员new了空间,等于说我的模版就没有使用,默认 就是char*类型,没有意义了,我要如何修改呢?

这时候明显要做模板特化,或者增加一个模板参数,比如:
template<>
struct EdgeType<char *>  // 对char *的特化
{
.....// 特殊处理
} ;