C++那些事之代码陷阱

星球有个朋友说面试官问他一道代码分析题目,并要求他提出解决方案,然后今天简单复现一下当时的代码,你能直接看出来存在什么问题吗?如何修复它,你能给出几种方法?分别在什么场景下用哪种方法呢?

代码简单介绍如下:给出了两个类,一个是buffer管理器,底层是buffer,buffer管理器持有一个buffer指针,有一个getBuffer函数。主逻辑也很简单,就是构造BufferManager,调用getBuffer。

#include <iostream>

class Buffer {
 public:
  Buffer() { std::cout << "Buffer created" << std::endl; }
  ~Buffer() { std::cout << "Buffer destroyed" << std::endl; }

  Buffer(const Buffer&) = delete;
  Buffer& operator=(const Buffer&) = delete;
};

class BufferManager {
 public:
  BufferManager() : buffer(new Buffer()) {
    std::cout << "BufferManager created" << std::endl;
  }

  ~BufferManager() {
    std::cout << "BufferManager destroyed" << std::endl;
    delete buffer;
  }

 private:
  Buffer* buffer;
};

void getBuffer(BufferManager manager) {
}

int main() {
  BufferManager manager;
  getBuffer(manager);
  return 0;
}

揭秘答案,戳下方呀~

22ffd130ec05b0691153c3d3bb9a03e8.jpeg

往期推荐:

向量数据库milvus源码剖析之开篇

热度更新,手把手实现工业级线程池

6edf0ef3cd8c136d12688113077ec834.jpeg

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值