增强智能指针会帮助我吗?

dan*_*ave 2 c++ boost

我正在使用Xerces做一些xml写作.

这是从我的代码中提取的几行:

DOMLSSerializer *serializer = ((DOMImplementationLS*)implementation)->createLSSerializer();
serializer->release();
Run Code Online (Sandbox Code Playgroud)

有没有我可以使用的boost智能指针,所以我可以避免调用serializer-> release(); 因为它不是例外安全.我看到的问题是,智能指针只能调用指针对象上的delete,是否可以自定义调用release?

谢谢

Cub*_*bbi 8

是的,智能指针可以调用自定义的"删除"功能对象.

#include <iostream>
#include <tr1/memory>
struct Example {
    void release() { std::cout << "Example::release() called\n"; }
};
struct ExampleDeleter {
        void operator()(Example* e) { e->release(); }
};
int main()
{
        {
        std::tr1::shared_ptr<Example> p ( new Example, ExampleDeleter() );
        }
        std::cout << " see?\n";
}
Run Code Online (Sandbox Code Playgroud)

(同样适用于boost:请参阅shared_ptr(Y*p,D d);构造函数.)