关于enable_shared_from_this的使用疑问
而且自以为可能有使用错误的可能 向各位请教
代码如下
template<class T>
class Socket : public std::enable_shared_from_this<T>
/*
这种使用enable_shared_from_this的方式正确么???
class Socket : public std::enable_shared_from_this<Socket> //T另外处理
*/
{
//.....
private:
tcp::socket _socket; //boost
MessageBuffer _readBuffer; // other class
public:
void ReadHandlerInternal(boost::system::error_code error, size_t transferredBytes)
{
if (error)
{
CloseSocket();
return;
}
_readBuffer.WriteCompleted(transferredBytes);
ReadHandler();
}
void AsyncReadWithCallback(void (T::*callback)(boost::system::error_code, std::size_t))
{
if (!IsOpen())
return;
_readBuffer.Normalize();
_readBuffer.EnsureFreeSpace();
_socket.async_read_some(boost::asio::buffer(_readBuffer.GetWritePointer(), _readBuffer.GetRemainingSpace()),
std::bind(callback, this->shared_from_this(), std::placeholders::_1, std::placeholders::_2));
/*
这里能够理解 传入的是T的成员函数 所以指针也是shared_from_this
*/
}
void AsyncRead()
{
if (!IsOpen())
return;
_readBuffer.Normalize();
_readBuffer.EnsureFreeSpace();
_socket.async_read_some(boost::asio::buffer(_readBuffer.GetWritePointer(), _readBuffer.GetRemainingSpace()),
std::bind(&Socket<T>::ReadHandlerInternal, this->shared_from_this(), std::placeholders::_1, std::placeholders::_2));
/*
这里为什么不是传入Socket的指针
*/
}
};
相关推荐
C++之enable_shared_from_this[代码]
本文详细介绍了C++中的std::enable_shared_from_this模板类,它允许被std::shared_ptr管理的对象安全地生成指向自身的std::shared_ptr,从而共享对象所有权。文章首先解释了为什么需要enable_shared_from_this,特别是在异步编程和事件处理中,它可以防止对象过早销毁和悬空指针问题。接着,文章通过示例代码展示了如何使用enable_shared_from_this,包括如何在异步操作中确保对象存活,以及如何使用weak_ptr来检测对象是否已被销毁。最后,文章总结了使用enable_shared_from_this的注意事项,如避免在构造函数和析构函数中使用shared_from_this,以及避免直接使用std::shared_ptr(this)以防止内存管理异常。
shared_from_this() in Constructor:直接替换std :: shared_ptr + std :: enable_shared_from_this-开源
显然,许多人不喜欢标准std :: enable_shared_from_this类不允许在构造函数中调用shared_from_this()。 猜猜是什么:应该填补这个空白。 boost库也可以这样做,但是它不允许在析构函数中创建shared_ptrs,并且它不提供release()方法来获取所包含指针的所有权。 但是,不利的一面是,它还没有成为线程安全的。
详解C++中shared_ptr的使用教程
shared_ptr能够记录对象被引用的次数,主要被用来管理动态创建的对象的销毁,这里我们就来详解C++中shared_ptr的使用教程,需要的朋友可以参考下
设计模式一日一练-state
设计模式一日一练-state 设计模式一日一练-state
C++11 shared_ptr源码剖析[代码]
本文深入剖析了C++11中的shared_ptr智能指针及其配套函数make_shared的实现原理与使用场景。shared_ptr通过引用计数机制实现多个指针共享同一对象的所有权,自动管理内存释放以避免内存泄漏。文章详细解析了shared_ptr的构造函数、移动语义、拷贝语义以及常用成员函数,并对比了直接构造与make_shared创建方式的差异。make_shared在内存分配效率和异常安全性方面具有优势,但也存在构造函数访问限制和内存延迟释放的缺点。最后通过代码示例演示了shared_ptr的基本用法,包括引用计数变化和reset操作的影响。


其它技术问题
