如果我返回一个指针会发生什么
What happens if I return a pointer?
显然,我更愿意使用std::shared_ptr<T>
或std::unique_ptr<T>
,但我正在处理98/03中的一些遗留代码。
我的情况是:
auto* SomeClass::ReturnPtr( void )
{
return this -> UniquePtrObject.get( );
};
如果我这样做会发生什么:
SomeObject.ReturnPtr( ) -> SomeFunction( );
临时指针是否会自动删除?还是我真的造成了泄漏?
这让我想到了一个类似Rvalue指针的表达式。Rvalue指针没有意义,是吗?
使用
auto* SomeClass::ReturnPtr()
{
return this->UniquePtrObject.get();
}
只要是UniquePtrObject
(或对其执行任何reset
),指针就有效。
因此SomeObject.ReturnPtr()->SomeFunction()
是有效的。
但以下将使指针悬空:
auto* createDanglingPointer()
{
SomeClass SomeObject = MakeSomeClass();
return SomeObject.ReturnPtr();
}
因为someObject的生存期在作用域的末尾结束。
临时指针非常危险。每当它之前指向的数据范围结束时,它就会被释放,这样指针就会悬空,并试图访问程序无法访问的某个随机位置。它可能会给您错误的结果,值或程序可能会因异常非法访问而终止。
相关文章:
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用基类指针调用基类的值构造函数的语法是什么?
- 将指针分配给另一个指针时会发生什么情况?
- 当该数组的索引中没有元素时,指针指向什么?
- C++:Lambda 函数指针转换的用例是什么?
- C++关于指针和使用函数将它们启动到堆的行为究竟是什么?
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 如果我在 const 函数上使用指针,我可以返回什么?
- 为什么此指针值不能转换为整数的规则是什么?
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- 以下与指针相关的代码的输出是什么?
- 指向数组基址的指针而不是指向第一个元素的指针有什么优点?
- C++中的指针.什么类型的对象