正確地將物件賦值給物件本身了嗎

2021-07-02 16:29:33 字數 863 閱讀 5046

資料摘自自我賦值常常被錯誤地應用,考慮下面的一段**:

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...