代码之家  ›  专栏  ›  技术社区  ›  Tony The Lion

库函数返回原始指针,我想使用智能指针

  •  3
  • Tony The Lion  · 技术社区  · 14 年前

    在这种情况下,我使用的库有许多函数可以将原始指针返回到对象,我现在如何在程序中使用boost智能指针使用这个库和智能指针?

    库是XELSCE-C++,一个例子是获取文档迭代器:

    boost::shared_ptr<DOMNodeIterator> itera = document->createNodeIterator(rootelement, DOMNodeFilter::SHOW_ALL, NULL, true);
    

    这个 createNodeIterator DOMNodeIterator 对象,这是一个原始指针,因此不能将其强制转换为 boost::shared_ptr ... 我该怎么处理?使用原始指针代替?

    3 回复  |  直到 13 年前
        1
  •  6
  •   ereOn    14 年前

    我想图书馆提供了一种释放 未经加工的

    如果是,你可以“创建”一个 shared_ptr 使用自定义删除程序,指定库提供的“自由函数”。

    例子:

    如果您有两个功能:

    Foo* createFoo();
    void freeFoo(Foo* foo);
    

    共享的 这样:

    boost::shared_ptr<Foo> foo(createFoo(), freeFoo);
    

    未经加工的 指针不是要被释放的,您可以提供一个“空删除器”,当引用计数器达到0时它什么也不做。

        2
  •  0
  •   Naveen    14 年前

    boost::shared_ptr<DOMNodeIterator> itera = document->createNodeIterator(rootelement, DOMNodeFilter::SHOW_ALL, NULL, true); boost::shared_ptr<DOMNodeIterator> itera( document->createNodeIterator(rootelement, DOMNodeFilter::SHOW_ALL, NULL, true)); 它应该编译得很好。

        3
  •  0
  •   Raghuram Reddy N    14 年前

    如果要在本地创建对象,请使用boost::scoped_ptr而不是boost:shared_ptr,因为如果作为参数传递给其他函数,这将非常危险。如果您正在处理shared_ptr,那么您还需要考虑对象引用计数。

    如果使用Scoped_ptr,则当对象的作用域结束时,它会自动删除。

    Foo类