相关疑难解决方法(0)

如何故意删除boost :: shared_ptr?

我有很多boost::shared_ptr<MyClass>对象,在某些时候我故意想要delete其中一些来释放一些记忆.(我知道那时我将永远不再需要尖头MyClass物体了.)我怎么能这样做?

我想你不能只delete()用我得到的原始指针调用get().

我见过一个函数get_deleter(shared_ptr<T> const & p)boost::shared_ptr,但我不知道如何使用它,并且还表示,实验就在旁边.(我想我有1.38升.)

也许只是boost::shared_ptr为变量分配一个新的空?这应该扔掉旧值并删除它.

c++ boost memory-management shared-ptr

45
推荐指数
3
解决办法
5万
查看次数

类构造函数的boost :: shared_ptr的默认值

假设我有类似的课程

class A{
    public:
    A(int a, boost::shared_ptr<int> ptr){
        // whatever!
    }
};
Run Code Online (Sandbox Code Playgroud)

我的问题是,该ptr的默认值是多少?我希望能够使用创建该类的实例

A myA(5);
Run Code Online (Sandbox Code Playgroud)

当然我知道我可以用一个参数创建另一个构造函数,但我正在寻找类似的东西

A(int a, boost::shared_ptr<int> ptr = WAT?)
Run Code Online (Sandbox Code Playgroud)

可能吗?目前我正在使用双构造方式,但这样做会很棒.

c++ boost smart-pointers multiple-constructors

10
推荐指数
1
解决办法
6970
查看次数

你如何在单身人士和未命名的阶级之间做出选择?

我会使用像这样的单身人士:

Singleton* single = Singleton::instance();
single->do_it();
Run Code Online (Sandbox Code Playgroud)

我会使用这样一个未命名的类:

single.do_it();
Run Code Online (Sandbox Code Playgroud)

我觉得Singleton模式除了具有可读错误消息之外没有优于未命名类的优势.使用单例比使用未命名的类对象更笨拙:首先,客户端必须首先获得实例的句柄; 第二,Singleton::instance()可能需要考虑并发的实现者.

那么为什么以及如何选择一个单身人士而不是一个未命名的班级呢?

作为附录,虽然明确定义了一个未命名的类可能是

class {
    // ...
}single;
Run Code Online (Sandbox Code Playgroud)

我可以这样定义它:

#ifndef NDEBUG
class Singleton__ {   // readable error messages,
#else
class {               // unnamed, clients can't instantiate
#endif
    // ...
}single;
Run Code Online (Sandbox Code Playgroud)

后一种方法具有可读编译器错误消息的优点,但在调试模式下不是单例.

c++ singleton

3
推荐指数
1
解决办法
3062
查看次数