2017-09-07 30 views
0

我有一些代码,用unique_ptr管理SSL和SSL_CTX指针。使用unique_ptr <SSL>与OpenSSL v1.1.0

下面的代码编译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

在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>; 

的定制删除适用于SSLSSL_CTX,也应该为工作。