基本上,这就是我所拥有的:
{
shared_ptr<EVP_PKEY> evpKeyPtr{EVP_PKEY_new(), EVP_PKEY_free};
//get key from file
}
这会导致堆损坏。以及:
shared_ptr<EVP_PKEY> evpKeyPtr{EVP_PKEY_new(), EVP_PKEY_free};
//same code as above to get key from file
EVP_PKEY_free(evpKeyPtr.get());
//evpKeyPtr does not go out of scope before the corruption occurs
但这不是:
EVP_PKEY* evpKey = EVP_PKEY_new();
//same code as above to get key from file
EVP_PKEY_free(evpKey);
我不知道为什么会发生这种情况。我知道不建议使用第二个代码,但是我这样做是为了测试会发生什么。
最佳答案
您只是获得了指针,但是shared_ptr一直是它的所有者。它将在作用域末尾删除两次。
如果您希望能够获得所有权,请使用unique_ptr(它具有release()方法)。