shared_ptr的共享
可以使用std::move
来进行移动。
cpp
#include <memory>
#include <iostream>
#include <utility>
class SharedData {
public:
explicit SharedData(int value) : value_(value) {}
void setValue(int value) {
value_ = value;
}
int getValue() const {
return value_;
}
private:
int value_;
};
class ClassA {
public:
explicit ClassA(std::shared_ptr<SharedData> sharedData) : sharedData_(std::move(sharedData)) {}
void printValue() const {
std::cout << "ClassA Value: " << sharedData_->getValue() << std::endl;
}
std::shared_ptr<SharedData> sharedData_;
};
class ClassB {
public:
explicit ClassB(std::shared_ptr<SharedData> sharedData) : sharedData_(std::move(sharedData)) {}
void printValue() const {
std::cout << "ClassB Value: " << sharedData_->getValue() << std::endl;
}
std::shared_ptr<SharedData> sharedData_;
};
int main() {
// 创建 SharedData 对象,并将其包装在 shared_ptr 中
std::shared_ptr<SharedData> sharedData = std::make_shared<SharedData>(42);
// 将 shared_ptr 传递给两个类
ClassA classA(sharedData);
ClassB classB(sharedData);
// 在两个类中修改共享的数据
classA.printValue(); // ClassA Value: 42
classB.printValue(); // ClassB Value: 42
classA.sharedData_->setValue(20);
classA.printValue(); // ClassA Value: 20
classB.printValue(); // ClassB Value: 20
classB.sharedData_->setValue(21);
classA.printValue(); // ClassA Value: 21
classB.printValue(); // ClassB Value: 21
return 0;
}