通过引用返回指针数组
Posted
技术标签:
【中文标题】通过引用返回指针数组【英文标题】:Return array of pointers by reference 【发布时间】:2017-05-07 20:05:54 【问题描述】:在我的一门课中,我有一个
Reservation * availability[30] = nullptr;
(当然我稍后会用一些值初始化)。
尽管如此,我有一个 getReservations() 函数,它应该返回对包含 30 个元素的数组的引用,因此可以像这样使用它:
getReservations()[i] ...
我应该如何声明该函数?
【问题讨论】:
旁注:我会亲自使用= ;
初始化数组。看起来您认为所有元素都已初始化为您编写的 nullptr
,但它们实际上是值初始化的。
@Quentin 好吧,值初始化和 nullptr 初始化做同样的事情,不是吗?不过我同意,以不同的方式对待第一个元素是愚蠢的。
@user2079303 是的,这就是我的观点。没有功能上的区别,但有点误导。
@Quentin 我的观点是,当它导致相同的结果而没有区别时,真的是 误导 吗?在我看来这很愚蠢。
【参考方案1】:
声明一个通过引用返回数组的函数的语法如下:
Reservation * (& getReservations())[30];
当然,如您所见,您不应该在现实生活中使用它。而是使用类型别名:
using Reservations = Reservation * [30];
Reservations & getReservations();
或者,因为数组没有边界检查,所以只返回一个指针,然后你可以像数组一样索引它:
Reservation * getReservations();
【讨论】:
【参考方案2】:Reservation *(&getReservations())[30];
应该为你做。
请记住悬空引用和指针管理。
【讨论】:
【参考方案3】:我建议你使用现代 C++:
using ReservationArray = std::array<Reservation*, 30>;
ReservationArray _availability;
并将其返回为:
ReservationArray& getReservations()
【讨论】:
原始指针在现代 C++ 中仍然难以置信有用。不要将“指针”误认为“拥有动态值”。这些是正交概念。 是的,它们在某些特定情况下很有用。但是为什么你会推荐在这里使用原始指针呢? 您做出了(未经证实的)假设,即这些指针拥有数据。如果他们不拥有,那么unique_ptr
会导致双重删除未定义行为,这是非常非常糟糕的。这些指针很可能是可为空的引用,在这种情况下,Reservation*
是正确的使用方法。以上是关于通过引用返回指针数组的主要内容,如果未能解决你的问题,请参考以下文章