<分区>
这段代码有问题吗?
// Example program
#include <iostream>
#include <string>
#include <vector>
class A
{
public:
A( std::vector<int>& ref ) : data(ref) {}
std::vector<int>& getData() const { return data; }
private:
std::vector<int>& data;
};
void modifyA( const A& a )
{
a.getData().push_back(3);
}
int main()
{
std::vector<int> foo;
A a(foo);
modifyA(a);
std::cout << foo.size() << std::endl;
std::cout << foo.front() << std::endl;
}
它看起来不错,但在使用类似方法部署更复杂的代码时,我在 Android 下遇到了未定义的行为。在某些时候,当通过这样的 getter ( shared_ptr
变为 NULL
,而它根本没有被修改)。我还看到上面的程序在 http://cpp.sh 上返回了意外的值在某个时候但不一致。最后,我无法在 MVCE 中隔离问题...
我只是想知道从 const getter 返回对非常量成员的非常量引用是否可能是个问题。