std::unique_ptr作为函数返回值导致的野指针

2018-03-08  本文已影响328人  EVANMORE

最近在使用unique_ptr时碰到一个奇怪的问题,先看一下如下这段代码

class T
{
public:
    ....
    int* getPayLoad() {return (int *)serial_payload.data();}
private:
    std::unique_ptr<std::vector<char>> serial_payload;
};

std::unque_ptr<> read()
{
  char msg[5] = {1, 2, 3, 4, 5};
  auto data = std::make_unique<T>(msg, msg+5);
  return std::move(data);
}

int main()
{
  int * data = read()->getPayLoad();
  printf("data[0] = %d", data[0]);
}

其实代码比较简单

int main()
{
  auto data = read();
  int* data_payload = data->getPayLoad();

}

这样data就是一个unique_ptr指针,生命周期直到main函数的调用结束为止,这个过程中read中创建的对象不会被释放。

这里也涉及编码风格的问题,后面会考虑怎样的编码规范可以避免出现这种情况!这种问题通常出了就比较难查

上一篇 下一篇

猜你喜欢

热点阅读