2

假设我有一个类 Boda:

class Boda {
    ...
};

cydo在这个类中有一个成员,我想成为一个智能指针(也就是说,我希望它在类被销毁后自动释放)。

我正在使用 Boost 的智能指针,所以我写:

class Boda {
    boost::shared_ptr<int> cydo;
    public:
        Boda () {
            cydo = boost::shared_ptr<int>(new int(5));
        }
};

这是将智能指针作为类成员的正确用法吗?

谢谢,博达赛多。

4

2 回答 2

10
class Boda {
    boost::shared_ptr<int> cydo;
    public:
        Boda () : cydo(new int(5)) {} 
};

不过,我想不出你为什么要包装int... :)

于 2010-08-14T11:37:03.473 回答
2

您应该问自己的真正问题是您是否需要将成员与类分开分配。与存储任何类型的指针相比,将成员存储在类中通常会更好。如果你不能做到这一点,例如成员的生命周期在容器创建之前或之后开始,可以扩展到成员的所有权之外可以让给其他对象,那么你必须使用指针。

一旦您需要使用指针,您应该更喜欢智能指针而不是原始指针,并根据您的要求选择特定类型。如果成员所有权不与其他对象共享,但您需要使用指针,因为包含的对象的生命周期可能在容器的生命周期之前或之后开始,或者如果所有权可以转移给其他对象,但管理资源(除非屈服)是容器的唯一责任,然后更喜欢unique_ptrauto_ptr

如果包含的对象不完全属于此类,则使用shared_ptr. 如果成员被不同的线程使用,这也可以使用,shared_ptr即使所有权仅在一个线程中拥有,每个线程也拥有自己的,以避免在另一个线程中使用对象时破坏一个线程中的对象。

于 2010-08-14T12:08:13.127 回答