【发布时间】:2015-01-30 09:50:55
【问题描述】:
Foo 的行为类似于循环迭代器。尽管我对此感到紧张,但下面的代码编译得很好,但会产生运行时错误。即使我从 get_current() 中删除了 const,我也会收到错误消息。当然,我可以返回一个指针,它会起作用;但是,我会在返回引用时获得更好的安全性吗?
#include <iostream>
#include <array>
#include <memory>
class Foo
{
public:
Foo();
void next();
const int& get_current() const;
private:
std::array<std::unique_ptr<int>, 3> arr_;
unsigned i_;
};
Foo::Foo() : i_(0)
{
arr_[0] = std::unique_ptr<int>(new int(5));
arr_[1] = std::unique_ptr<int>(new int(6));
arr_[2] = std::unique_ptr<int>(new int(7));
}
void Foo::next()
{
++i_;
i_ %= 3;
}
const int& Foo::get_current() const
{
return *arr_[i_];
}
int main()
{
Foo foo;
int* p;
*p = foo.get_current();
//do something with p
std::cout << *p << std::endl;
foo.next();
*p = foo.get_current();
//do something with p
std::cout << *p << std::endl;
return 0;
}
【问题讨论】:
标签: c++ class pointers reference member