나는 다음과 같은 클래스 구조가 있습니다공유 포인터
클래스 Initialiser에서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
}
, 내가 같은 개인 회원에게 INT의 벡터와 클래스 바의 인스턴스를 가지고 있습니다. 막대는 int의 벡터에 대한 공유 포인터로 초기화되어야하며이 벡터는 Initialiser와 Bar에서 공유되어야합니다. 그러나 현재 Initialiser가 x의 setter를 호출하면 바 내부의 벡터에는 영향을 미치지 않습니다. 나는 이것을 에서 확인합니다.. 왜 체크() 가치 4 인쇄하지만 여전히 값 1?
또한 손에있는 경우 'shared_ptr'이 필요하지 않으며 'Bar' 객체가'Initialiser '가 소유 한 벡터에 대한 포인터 또는 참조를 보유하는 것이 적절할 수 있음을 지적 할 가치가 있습니다. – Persixty
@ DanAllen - 예, 방금 추가하는 중이었습니다. 감사합니다 :) – StoryTeller
도와 줘서 고마워! 이것은 좋은 해결책입니다. – beginneR