【发布时间】:2009-03-17 18:13:00
【问题描述】:
我有一个在一个公共方法中创建对象的类。该对象是私有的,对类的用户不可见。该方法然后调用同一类中的其他 private 方法并将创建的对象作为参数传递:
class Foo {
...
};
class A {
private:
typedef scoped_ptr<Foo> FooPtr;
void privateMethod1(FooPtr fooObj);
public:
void showSomethingOnTheScreen() {
FooPtr fooObj(new Foo);
privateMethod1(fooObj);
};
};
我相信在这种情况下正确的智能指针应该是 scoped_ptr,但是,我不能这样做,因为如果这样使用 scoped_ptr 会使类不可复制,所以我应该使用这样的方法:
void privateMethod1(FooPtr& fooObj);
privateMethod1 不存储对象,也不保留对它的引用。只需从 Foo 类中检索数据。
正确的方法可能是根本不使用智能指针并在堆栈中分配对象,但这是不可能的,因为它使用的库不允许堆栈上的对象,它们必须在堆上。
毕竟,我仍然对 scoped_ptr 的真正用法感到困惑。
【问题讨论】:
-
我对“不允许堆栈上的对象”的库感到好奇。对象是否在堆上的库内与工厂一起分配?库是否拥有指针的所有权并将其删除?不能使用堆栈分配对象的原因是什么?
标签: c++ class boost smart-pointers