首页 > 解决方案 > 实现托管缓冲区和“参考”

问题描述

我想用类似于以下的托管变体来实现缓冲区:

struct Buffer {
        int size;
        char *ptr;
        void destruct() {
                delete ptr;
        }
};

struct MngdBuffer : Buffer {
        MngdBuffer() : Buffer() {}
        ~MngdBuffer() {
                destruct();
        }
};

加上复制构造函数等。这将允许函数获取Buffer并访问其内容,而不管谁拥有它指向的内存。但是,MngdBuffer从函数返回 a 并将结果放入 a时会引入一个问题Buffer

MngdBuffer func() {
        MngdBuffer buf;
        buf.ptr = new char;
        buf.size = 1;
        return buf;
}

int main() {
    Buffer buf = func();
}

的析构函数MngdBuffer被调用,内存buf被释放。有可能防止这种情况吗?如果不是,那么实现这样一个类的“正确”方法是什么?

标签: c++inheritancememory

解决方案


推荐阅读