通过类引用访问和更改矢量
Accessing and Altering Vectors through class references
这是我能解决问题的最简单的方法,很抱歉长度:
#include <vector>
#include <iostream>
class Bar
{
private:
std::vector<int> intVector_;
public:
Bar() {};
void addInt(int newInt)
{
intVector_.push_back(newInt);
std::cout << intVector_.size() << " ";
};
int getIntVectorSize() { return intVector_.size(); };
};
class Foo
{
private:
Bar bar_;
public:
Foo() { bar_ = Bar(); };
Bar getBar() { return bar_; };
};
int main(char argc, char* argv[])
{
Foo foo = Foo();
foo.getBar().addInt(1);
std::cout << foo.getBar().getIntVectorSize() << " ";
foo.getBar().addInt(2);
std::cout << foo.getBar().getIntVectorSize() << " ";
foo.getBar().addInt(3);
std::cout << foo.getBar().getIntVectorSize() << " ";
}
我的问题是,向向量添加int似乎只持续addInt()
的持续时间。我的矢量大小输出如下:
1 0 1 0 1 0
我对C++和所有这些引用/指针业务都很陌生,所以我不知道如何解决这个问题,或者这是否可能。谢谢你的帮助!
这是因为getBar()
通过值返回一个Bar
,这为函数的每个调用生成一个bar_
的副本,并且您正在修改临时的向量。
您可以通过返回引用来避免这种情况:
class Foo
{
private:
Bar bar_;
public:
Foo() { bar_ = Bar(); }; // you prob. want to use an initialiser list btw.
Bar& getBar() { return bar_; };
// ^ notice the ampersand
};
这样,对getBar
的返回值所做的任何修改都是在bar_
上完成的,而不是在语句末尾销毁的临时副本。
相关文章:
- 在函数内创建的对象的范围 - 如果在函数外部存储和访问引用,它们是否有效?
- 通过引用访问矢量元素是否会降低C++的空间复杂性?
- 形成对对象的引用是否构成访问?
- 错误:未定义对"静脉类型信息::电池访问"的引用
- 如何在 c++ 中通过基类引用访问派生类的对象?
- 项目引用上的QT访问冲突
- 通过引用传递时访问std::vector的元素
- 是否可以在堆中分配向量,但通过引用进行访问
- 如何通过引用或指针访问二维矢量
- 访问对象的取消引用值的语法
- 为什么引用类型在使用临时对象访问时是左值
- 如何访问对象的成员变量的取消引用值
- 如果包含引用成员的类中缺少原始变量,为什么它仍然可以访问?
- 为什么访问我的引用捕获变量会导致我的 lambda 函数出现段错误?
- 如何从派生类访问引用成员变量?
- 无法访问引用 C++ 后面的信息
- 在引用向量时使用访问器进行迭代C++
- 访问由 void 指针引用的结构的成员
- 访问引用变量会终止程序
- C++11 lambda 无法访问引用