Effective C++里说“令拷贝赋值函数调用拷贝构造函数是不合理的”,不太理解。解决方案

Effective C++里说“令拷贝赋值函数调用拷贝构造函数是不合理的”,不太理解。
Effective C++第三版 中文 条款12,P60里说
“令拷贝赋值函数调用拷贝构造函数是不合理的”

我印象中“拷贝赋值函数”的写法应该是(以String为例):
String & String::operate =(const String &other) 
{  
  String tmp(other);
  swap(tmp);
  return *this;
}
这里“拷贝赋值函数”不就调用了“拷贝构造函数”吗?

Effective C++ 里的那句话该怎么理解?
谢谢

------解决方案--------------------
其实这个规则主要是从语义上来说的,拷贝构造函数的语义是构造一个对象,而拷贝赋值函数的语义是用一个已经构造好的对象去赋值给另一个已经构造好的对象。
令拷贝赋值函数调用拷贝构造函数是不合理的。因为这就像试图构造一个已经存在的对象。
反之,令拷贝构造函数调用拷贝赋值函数也没有意义。对一个尚未构造好的对象赋值,就像在一个尚未初始化的对象身上做“只对已经初始化的对象才有意义”的事情一样。

如果你发现你的拷贝构造函数和拷贝赋值函数有相近的代码,消除重复代码的做法是,建立一个新的成员函数给两者调用。这样的函数往往是private而且常被命名为init。这个策略可以安全消除拷贝构造函数和拷贝赋值函数之间的代码重复。