:
class Appointment
{
public:
std::string subject;
std::string location;
Appointment()
{
}
Appointment(const Appointment& src) :
subject(src.subject), location(src.location)
{
}
Appointment& operator=(const Appointment& lhs)
{
subject = lhs.subject;
location = lhs.location;
}
};
这可以进一步简化,由编译器生成的默认构造函数和赋值运算符足以自动为您深度的值复制C++,你应该使用std::string
来满足你的字符串需求。
下面的代码,你写
Appointment(Appointment& a)
{
subject = new char;
*subject = *(a.subject);
}
不会做你认为它会做的,上面你分配一个字符(new char
)则a.subject
第一字符分配给它(*subject = *(a.subject)
)
为了复制char*
指向的字符串,您必须首先确定字符串长度,分配内存以保存字符串,然后复制字符。
Appointment(Appointment& a)
{
size_t len = strlen(a.subject)+1;
subject = new char [len]; // allocate for string and ending \0
strcpy_s(subject,len,a.subject);
}
到char*
的另一种方法是使用一个std::vector<char>
,这取决于你想用字符串做什么。
你需要这些字符串的长度和std :: copy。或者避免使用char *并使用std :: string,这可以在复制时自行处理。 – nurettin 2013-05-13 05:53:12
如果你在内存位置有一个数组,你可能不想使用'new char',因为这只会为1个字符分配足够的内存,所以你会遇到[未定义的行为](http:// en。维基百科。org/wiki/Undefined_behavior)如果你试图访问数组的其余部分(意味着它可能工作,但不一定是所有的时间)。你需要改为说'new char [len]'。 – Dukeling 2013-05-13 05:59:21
而你有两个相同参数化的半合格拷贝。这段代码甚至不会*按原样编译,更不用说是正确的。你需要* a *单数符合copy-ctor(使参数成为一个const引用),以正确地初始化* both *成员,或者更好的是,使用'std :: string'并使所有这些完全不相关。 – WhozCraig 2013-05-13 06:04:15