2012-08-15 117 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

相关问题