我的应用程序中有一个案例,我需要根据从外部源返回的类型信息动态创建一个新对象。基本上,我有 A 类来处理这个任务。该类将创建类 B、C 或 D 等(例如 B 是基类,C 和 D 是派生类型)。然后我想将此对象传递给一个现有接口,该接口充满了需要 B 类型引用参数的方法。最终,这个动态分配的对象存储在另一个类的 boost::shared_ptr 成员对象中(我使用 reset() shared_ptr 上的方法)。因此,此时内存正在由某人管理。
基本上,这对我来说似乎是一个糟糕的设计(我正在到处传递这个动态分配的对象,在某一点取消引用它,然后稍后再次获取指向它的指针)。另一方面,我不想更改接口的几个方法来获取指针而不是引用。当我将对象传递给接口以进行进一步处理时,我想不理会该接口并取消引用指针。我在某处读到,当您有一个采用引用参数的方法时,您会说“我不关心这里的内存管理”和“这个对象将被初始化 - 即不能为 NULL”。该对象最初是在堆上创建的,最终将由另一个管理其内存的类“拥有”。