我正在使用Poco Net的服務器上當前工作&反應堆模式。 我發現類CSConnection unique_ptr是因爲類對象被引用到工作線程池。將類放入unique_ptr後立即釋放類
構造:
CSConnection::CSConnection(StreamSocket& socket, SocketReactor& reactor) : _socket(socket), _reactor(reactor)
{
std::unique_ptr<CSConnection> autoptr(this);
app.logger().information("Connection : " + _socket.peerAddress().toString());
_reactor.addEventHandler(_socket, NObserver<CSConnection, ReadableNotification>(*this, &CSConnection::onReadable));
_reactor.addEventHandler(_socket, NObserver<CSConnection, ShutdownNotification>(*this, &CSConnection::onShutdown));
_reactor.addEventHandler(_socket, NObserver<CSConnection, ErrorNotification>(*this, &CSConnection::onError));
_socket.setBlocking(false);
sendSync();
}
析構函數:
CSConnection::~CSConnection()
{
app.logger().information("Disconnect : " + _socket.peerAddress().toString());
_reactor.removeEventHandler(_socket, NObserver<CSConnection, ReadableNotification>(*this, &CSConnection::onReadable));
_reactor.removeEventHandler(_socket, NObserver<CSConnection, ShutdownNotification>(*this, &CSConnection::onShutdown));
_reactor.removeEventHandler(_socket, NObserver<CSConnection, ErrorNotification>(*this, &CSConnection::onError));
if(player)
{
player->relase();
if(player->hasActiveCharacter())
{
player->getActiveCharacter()->leaveGameWorld();
player->nullActive();
}
}
}
而且該應用程序後釋放該類瞬間(可以通過 「斷開」 在服務器日誌中觀察到)。
有什麼問題嗎? 謝謝。
@BartekBanachewicz他沒有使用auto_ptr! –
'unique_ptr'不是'auto_ptr';相似但更好。在構造函數的結尾,你的'autoptr'變量被銷燬並刪除'this'。很確定這不是你想要的。 –
你有沒有考慮過使用函數? –