はい、できます(すべきですか?)。
これは一般的な方法です。あなたが述べたように、それは明示的にdelete()を呼び出す必要性を回避します。
さらに先に進むことができます。次に例を示します。
class RSAKey
{
public:
RSAKey();
private:
shared_ptr<RSA> d_rsa; // A pointer to a RSA structure from OpenSSL
}
私はこのように初期化します:
RSAKey::RSAKey()
{
RSA* rsa = RSA_generate_key(1024, 1, NULL, NULL);
if (NULL == rsa) throw DummyException();
d_rsa.reset(rsa, RSA_free); // Note the specific release method.
}
d_rsaが使用されなくなると、への自動呼び出しRSA_free()
が発生します。かっこいいじゃないですか!
アップデート
がオプションの場合は、オーバーヘッドが少なく移動可能な代わりにC++11
使用する方がよいでしょう。std::unique_ptr
これは、コピーに関して、囲んでいるクラスをどのように動作させるかによって異なります。