c++,在堆上创建的对象与本地创建的对象-返回指针时

标签 c++ pointers heap-memory

这是来自的后续问题 Safe in C# not in C++, simple return of pointer / reference,

这是:

person* NewPerson(void)
{
  person p;
  /* ... */
  return &p; //return pointer to person.
}

一样吗?

person* NewPerson(void)
{
  person* pp = new person;

  return pp; //return pointer to person.
}

我知道第一个是个坏主意,因为它将是一个野指针。 在第二种情况下,对象在堆上是否安全——就像在 C# 中一样 当最后一个引用消失时超出范围?

最佳答案

是的,第二种情况是安全的。

但是调用者需要删除返回的指针。您可以将其更改为使用 boost::shared_ptr 并且当它不再使用时将被销毁:

boost::shared_ptr<person> NewPerson()
{
    boost::shared_ptr<person> pp = boost::make_shared<person>();

    return pp;
}

如果是 C++11,那么您可以使用 std::shared_ptrstd::unique_ptr

关于c++,在堆上创建的对象与本地创建的对象-返回指针时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8458188/

相关文章:

c++ 生成静态库,然后将其与 Clion/Cmake 一起使用

c++ - 在单元测试中验证 static_assert

c++ - C++ 中是否有标准的循环迭代器

c++ - 难以理解 * 和 & 当它们与线程一起出现时

c++ - (c++) 堆上没有任何指针的对象会怎样?

c++ - 对有限数量的命令进行快速语音识别

c - 如何在c中返回指向可变大小的二维数组的指针

c++ - 更改局部变量的地址

jar 文件中的 Java 堆空间错误

java - Java类的JVM调优