shared_ptr的共享

本文共246字。
Copyright: 知识共享署名 非商业性使用 相同方式共享 4.0 国际许可协议 | CC BY-NC-SA 4.0

可以使用std::move来进行移动。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#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;
}