c++ - 围绕 shared_ptr 构建对象系统

标签 c++ inheritance language-design shared-ptr

我正在使用 shared_ptr 作为我正在使用的玩具语言的垃圾收集器,它可以编译为 C++。我的对象派生自上面的一个公共(public)基类,其中有字符串和数字,然后有 vector 和映射。 c++ 端的所有内容都包装在 shared_ptr 中传递,因此我的容器实际上包含 shared_ptr 以便当它们被销毁时,它们的内容也会被销毁。这个方案可行,但感觉有点奇怪,因为作为基础对象的容器持有 shared_ptr。我的设计有缺陷吗?如果是,围绕这种方法的替代层次结构是什么?

最佳答案

我是这样设置的:

namespace toylang {

class Object;
// main handle type; use this for all object references
// replace with boost::intrusive_ptr or similar if too inefficient
typedef std::shared_ptr<Object> obj;

class Object
{
    // whatever
};

class Number : public Object
{
    int x;
    // etc
};

class Array : public Object
{
    std::vector<obj> a;
    // etc
}

请注意,此方案中的 ToyLang 数组是指针 vector ,提供语言引用语义。这实际上在动态语言中很常见:Lisp、Python 和其他语言都是这样工作的。只要您没有循环引用,shared_ptr 的引用计数就会为您提供适当的垃圾回收。

关于c++ - 围绕 shared_ptr 构建对象系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5844315/

相关文章:

java - 无法调用初始化为父类(super class)的 ArrayList 中派生类的方法

php - 为什么 PHP 属性不允许函数?

cuda - 如何实现CUDA <<<…>>>()内核启动语法

c++ - 如何在 C++ 中管理日期

c++ - 在 while 循环中递增 *char 的指针

c++ - C++ 中的运行时模板依赖

regex - 为什么正则表达式不能使用关键字而不是字符?

c++ - 意外警告 : inline function used but never defined

c++ - 为什么用户定义的复制构造函数调用基本构造函数,而默认复制构造函数则不调用?

objective-c - 如何访问父类中声明的方法?