这是来自的后续问题 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_ptr
或 std::unique_ptr
。
关于c++,在堆上创建的对象与本地创建的对象-返回指针时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8458188/