gpt4 book ai didi

c++ - shared_ptr 的 vector ,从函数返回并修改它

转载 作者:行者123 更新时间:2023-11-30 01:23:19 26 4
gpt4 key购买 nike

本质上,我希望我的 2 个类共享一些数据,我希望将这些数据作为 shared_ptr 对象的 vector 。

我已将我的代码缩减为以下简单的可编译示例。

我希望对象 A 查看在对象 B 中初始化的数据。但是当我尝试在 A 的方法中执行 push_back() 时,它并没有改变 B 中 shared_ptr 对象 vector 的大小。 (在注释“This is the point of interest”的那一行。)

我需要使用什么方法来获得此功能,或者我走错了路。 (这里是 C++ 新手)

#include <memory>
#include <vector>
#include <iostream>
using std::cout;
using std::endl;
class DataClass {
public:
int i_;
};
class B {
public:
// constructor:
B() : my_data_(std::vector<std::shared_ptr<DataClass> >()) {
my_data_.push_back(std::shared_ptr<DataClass> (new DataClass));
my_data_.push_back(std::shared_ptr<DataClass> (new DataClass));
my_data_[0]->i_ = 1;
my_data_[1]->i_ = 2;
cout<<my_data_.size()<<endl;
};

// return the data
std::vector< std::shared_ptr<DataClass> > get_my_data() {
return my_data_;
};

// check the data:
void CheckData() {
cout<<my_data_.size()<<endl; // This is the point of interest
};
// member variable
std::vector< std::shared_ptr<DataClass> > my_data_;
};
class A {

public:
void start() {
// begin interaction with B class:
B b;

// get the vector of data pointers:
a_has_data_ = b.get_my_data();

// modify some of the data:
a_has_data_.push_back(std::shared_ptr<DataClass> (new DataClass));
a_has_data_[2]->i_ = 42;

b.CheckData();
};
private:
std::vector< std::shared_ptr<DataClass> > a_has_data_;

};
int main() {
A a;
a.start();
}

最佳答案

您正在返回 vector 的拷贝。您需要返回对数据的引用:

// return the data
std::vector< std::shared_ptr<DataClass> >& get_my_data()
{
return my_data_;
};

那是 A 正在访问 b 的 vector ,而不是它的拷贝。

关于c++ - shared_ptr 的 vector ,从函数返回并修改它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15167166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com