如果可能的话使用boost :: scoped_ptr

cyb*_*cop 0 c++ boost

我在pagePtr.h中有这样的东西

typedef int (*FunPtrType)(char* sz, unsigned int max_bytes, char* arg1,
char* arg2, char* arg3, char* arg4);
Run Code Online (Sandbox Code Playgroud)

以及创建对象的静态函数

static pagePtr* CreatePage( FunPtrType Ptr2Fun)
{
    return new pagePtr(ptr2Fun);
}
Run Code Online (Sandbox Code Playgroud)

会提升:: scoped_ptr帮助我不要担心abt删除后来创建的那些.如果是,我应该如何在这种情况下实施.如果可以的话,还有哪些更好的选项可以删除创建的对象.

hmj*_*mjd 5

boost:scoped_ptr不可复制,因此无法退回CreatePage().如果std::unique_ptr可以使用C++ 11,则可以使用:

static std::unique_ptr<pagePtr> CreatePage( FunPtrType Ptr2Fun)
{
    return std::unique_ptr<pagePtr>(new pagePtr(ptr2Fun));
}
Run Code Online (Sandbox Code Playgroud)

pagePtr没有可复制的理由?如果没有,复制成本低,则按值返回.

如果pagePtr是不可复制的并且std::unique_ptr不可用,那么您可以使用boost::shared_ptr从调用者中删除责任以销毁返回的pagePtr.缺点是使用shared_ptr并不表示单独所有权并为不需要的引用计数付出代价(有关可用智能指针的更多信息和说明,请参阅哪些C++智能指针实现可用?)

从发布的代码,pagePtr看起来是一个函数指针的包装,所以考虑使用boost::function,可以复制,并pagePtr完全删除:

typedef boost::function<int(char* sz,
                            unsigned int max_bytes,
                            char* arg1,
                            char* arg2,
                            char* arg3,
                            char* arg4)> FunPtrType;
Run Code Online (Sandbox Code Playgroud)