我有一些使用unique_ptr管理SSL和SSL_CTX指针的代码。
以下代码使用OpenSSL 1.0.2进行编译,但不能使用OpenSSL 1.1.1进行编译:
std::unique_ptr<SSL> m_pSession
我包含'openssl / ssl.h',但是使用OpenSSL 1.1.1我得到以下编译错误(使用Visual Studio):
error C2027: use of undefined type 'ssl_st'
我已经google了一下,似乎OpenSSL的后期版本无法在任何地方提供ssl_st
的真实声明?这将是什么解决方案?
答案 0 :(得分:0)
在OpenSSL论坛的帮助下,我得到了以下解决方案。
为unique_ptr定义了自定义删除器:
struct SslDeleter {
void operator()(SSL *_p)
{
SSL_shutdown(_p);
SSL_free(_p);
}
void operator()(SSL_CTX *_p)
{
SSL_CTX_free(_p);
}
};
使用typedef轻松使用智能指针:
using UniqueSslPtr = std::unique_ptr<SSL, SslDeleter>;
和
using UniqueCtxPtr = std::unique_ptr<SSL_CTX, SslDeleter>;
自定义删除工具适用于SSL
和SSL_CTX
,也适用于shared_ptr
。