2012-08-15 114 views
0

我已經干涉CAsyncSocket,並希望傳遞周圍的對象。爲什麼CAsyncSocket沒有拷貝構造函數或=操作符?

class ClientSocket : public CAsyncSocket 
{ 
CAsyncSocket nitSocket; 
    public: 
ClientSocket(void); 
virtual ~ClientSocket(void); 
}; 

我得到sevaral編譯錯誤,當我做

void SomeOtherClass::func(ClientSocket &socket) 
    this->socket = socket; 
} 

錯誤:

'CAsyncSocket::operator =' : cannot access private member declared in class   'CAsyncSocket' 

我看着文件,發現

private: 
CAsyncSocket(const CAsyncSocket& rSrc); // no implementation 
void operator=(const CAsyncSocket& rSrc); // no implementation 

我應該讓我的拷貝構造函數但由於沒有實施對於基類,我的代碼會在運行時崩潰。

重要提示:我應該複印一份嗎?我的新對象會收到原始對象的事件嗎?

+0

我不相信Winsock支持'dup()'操作。只需將您的套接字成員更改爲參考。 – EJP 2012-08-15 10:57:22

回答

0

Polymorphic C++中的類型通常是non-copyable,因爲獲取基類的副本很容易導致slicing

+0

@Fetissov請在正文結尾回答我的問題。 – 2012-08-20 06:24:13

+0

我並不擅長破碎的Windows API,但我不相信只是獲取C++對象的副本會使其接收原始的網絡事件。 – 2012-08-20 12:46:01

+0

@Fetissov對於不可複製的類,如果我想派生一個類並且想寫一個拷貝構造函數,怎麼樣?如何以最有效的方式做到這一點? – 2012-08-20 14:23:12

相關問題