如果你只需要一個小的RAII類,那麼你可以自己編寫助手類。它是如此之小,它幾乎拉其自身的重量(更不用說證明應該在庫拉):
class DOMLSSerializerOwner {
public:
DOMLSSSerializerOwner(DOMLSSerializer *serializer) : m_serializer(serializer) { }
~DOMLSSerializerOwner() { m_serializer->release(); }
operator DOMLSSerializer*() { return m_serializer; }
private:
DOMLSSerializerOwner(const DOMLSSerializerOwner &other); // disabled
void operator=(const DOMLSSerializerOwner &rhs); // disabled
DOMLSSerializer *m_serializer;
};
然後你就可以讓你的代碼閱讀:
void f()
{
DOMLSSerializerOwner serializer = ((DOMImplementationLS*)implementation)->createLSSerializer();
serializer->doThis();
serializer->doThis();
// Look Ma: no release() call; 'serializer' does it automatically when going out of scope
}
因爲它現在是異常安全的,如果你希望智能指針可以調用發行版本,那麼智能指針如何提供幫助? – Patrick 2010-07-09 12:55:34
對不起,我的意思是它不保存調用釋放(),因爲它可能不會在拋出異常時調用。 – dangerousdave 2010-07-09 13:03:15