c++ - 实现托管缓冲区和“参考”
问题描述
我想用类似于以下的托管变体来实现缓冲区:
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
被释放。有可能防止这种情况吗?如果不是,那么实现这样一个类的“正确”方法是什么?
解决方案
推荐阅读
- go - 被 vscode delve 调试器弄糊涂了
- php - php cs 修复程序。PHP标签内的缩进
- arrays - 从索引数组创建二进制矩阵
- lua - 在 GPU 上运行火炬预测模型时出错
- javascript - 是否可以从 node.js 中的异步函数返回值?
- c++ - 私有运算符 delete 会触发 GCC 和 Clang 的编译时错误,但不会触发 MSVC
- .htaccess - 301 重定向未重定向到没有尾部斜杠的正确 URL
- scala - 从 Play Websocket 迁移到 Akka HTTP Websocket
- node.js - JHipster 应用程序在开发模式下生成消息“this.driver.matchesElement”
- amazon-web-services - 在非 Amazon Linux 映像中重新启动的 Ecs 代理