Да, вы можете (должны?).
Это обычная практика . Как вы заявили, это устраняет необходимость явного вызова 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
вместо него, который имеет меньше накладных расходов и является подвижным.
Это зависит от того, как вы хотите, чтобы ваш включающий класс вел себя в отношении копирования.