我这样想:
String s1 = "hello";
发生了2个操作(例如,如所述here):( 1)使用字符串文字"hello"
构建临时对象,然后(2)复制构造s1
与临时对象。
但是,在运行以下代码时,我得到的唯一打印来自String的构造函数,而不是来自其复制构造函数。为什么呢?
static char *AllocAndCpy(const char *src_);
class String
{
public:
String(const char *string_="");
String(const String &other_);
private:
char *m_str;
};
String::String(const char *string_): m_str(AllocAndCpy(string_))
{
std::cout << "constructor" << std::endl;
}
String::String(const String &other_):m_str(other_.m_str)
{
std::cout << "copy constructor" << std::endl;
}
static char *AllocAndCpy(const char *src_)
{
size_t src_length = strlen(src_)+1;
char *dest_ = new char[src_length];
return (static_cast<char *>(memcpy(dest_, src_, src_length)));
}
int main()
{
String s1 = "hello";
return 0;
}