資料摘自自我賦值常常被錯誤地應用,考慮下面的一段**:
class string{
public:
string & operator=(const string &s);
private:
char * data;
我們會輕易地使用下面的方法來實現賦值:
string &string::operator=(const string & s)
delete data;
data = new char[strlen(s.data)+1];
strcpy(data, s.data);
return * this;
乍一看,這個方法好像是沒有問題的,但是當我們把乙個string物件賦給它本身時,這個方法就會徹底失敗,因為s和*this都指向同樣的物件.
避免這個問題的最簡單的方法就是顯式地加以預防:
//方案1
string &string::operator=(const string & s)
if(&s != this){
delete data;
data = new char[strlen(s.data)+1];
strcpy(data, s.data);
return *this;
//方案2
string &string::operator=(const string & s)
char * newdata = newchar[strlen(s.data)+1];
strcpy(newdata, s.data);
delete data;
data = newdata;
return * this;
(C )正確地給string型別變數賦值
方法1 呼叫stl方法 建構函式 或 assign 賦值 方法 方法2 待商榷 指標操作 使用scanf s s 0 或 memcpy函式 include include include includeint main 執行結果 stl str content i m a string.size 1...
給多維陣列物件賦值
var messagetable new function var messageinfo function passparm messageinfo messagetable messageinfo i messageid message messageinfo i message message...
理解物件賦值給介面
所以說只實現介面的部分方法 實現該介面 那麼就不可以將物件賦值給該介面 package main import fmt type animal1 inte ce type animal2 inte ce type felid inte ce type cat struct func c cat sa...