c++ - 在类 : scoped_ptr or shared_ptr? 中将智能指针作为参数传递

标签 c++ class boost smart-pointers

我有一个类在一个公共(public)方法中创建一个对象。该对象是私有(private)的,对类的用户不可见。此方法然后调用同一类中的其他私有(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 的实际用法还是一头雾水。

最佳答案

另一种可能性是将对象创建为 static_ptr 以便于内存管理,但只需将原始指针传递给其他私有(private)方法:

void privateMethod1(Foo *fooObj);

void showSomethingOnTheScreen() {
  scoped_ptr<Foo> fooObj(new Foo);
  privateMethod1(fooObj.get());
};

关于c++ - 在类 : scoped_ptr or shared_ptr? 中将智能指针作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/655450/

相关文章:

c++ - 开关错误::不能出现在常量表达式中

c++ - 如何将 char * buffer 转换为 unsigned short int * bufferSh

c++ - 预处理器指令应该在行首吗?

objective-c - 如何在 Objective-C 中实例化一个不从 NSObject 继承的类

c++ - 使用数组填充对称矩阵

c# - 如何使 Visual Studio 2010 将文件扩展名识别为 C#/ASPX/C/C++ 文件?

c++ - 声明一个没有长度的静态数组,然后定义一个长度是否有效?

php - 在一个类中引用其他类 - php

c++ - 如何将 boost 线程添加到 vector

c++ - boost asio无法识别计时器对象