类在投入unique_ptr后立即释放
Class is freed instantly after it's put into unique_ptr
我使用 Poco Net & Reactor 模式在服务器上工作。我不想做类 CSConnection 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();
}
}
}
之后,应用程序立即释放该类(可以通过服务器日志中的"断开连接"来观察)。
有什么问题?谢谢。
std::unique_ptr<CSConnection> autoptr(this);
离开构造函数后,它会尝试删除this
并调用析构函数。 在这种情况下,在构造已删除的对象后使用它是未定义的行为。
自杀(delete this
)是罕见的,并且有特殊的用途,例如在参考计数对象中。
相关文章:
- 释放错误后堆使用
- G锁定铸造到基础上会释放模拟行为
- 在将变量声明为引用时,堆在释放后使用
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- C++双重释放或损坏(out)
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 如何在c++中释放内存
- 使用全局声明的向量时,C++双重释放错误/损坏
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- 调用析构函数以释放动态分配的内存
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 如何在向量中释放指针?
- std::unordered_map析构函数不释放内存?
- 在C++中释放内存期间,迭代器与指针有何不同
- C++中的大小释放:全局运算符delete的正确行为是什么(void*ptr,std::size_t size)