Skip to content

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;
}