我有下面的類結構:共用指針作爲類成員
class Bar {
private:
std::shared_ptr<std::vector<int>> y_;
public:
Bar(std::shared_ptr<std::vector<int>> p):
y_(p)
{}
int getFirstVal() {return y_->at(0);};
};
class Initialiser {
private:
std::vector<int> x_;
Bar bar_;
public:
Initialiser(std::vector<int>& v):
x_(v),
bar_(std::make_shared<std::vector<int>>(x_))
{}
void set_x(std::vector<int> x) {x_ = x;}
void check(std::vector<int> x){
set_x(x);
std::cout << "New value of x= " << bar_.getFirstVal() << std::endl;
}
};
int main(){
std::vector<int> z = {1,2,3};
Initialiser init(z);
std::vector<int> x_new = {4,5,6};
init.check(x_new); // should print 4
}
在類初始化劑,我具有如私有成員整數的向量和的類BAR的一個實例。條應該用一個指向int整數的共享指針進行初始化,並且這個向量應該在Initializers和Bar之間共享。然而,目前,如果Initialiser調用x的setter,這不會影響bar內的向量。我在檢查()中證明了這一點。爲什麼check()打印值爲4但仍爲值1?
另外值得指出的是,在這種情況下,不需要'shared_ptr',它可能適用於'Bar'對象持有一個指針或對'Initialiser'擁有的向量的引用。 – Persixty
@丹艾倫 - 是的,我只是在添加這個過程。謝謝:) – StoryTeller
感謝您的幫助!這是一個很好的解決方案。 – beginneR