Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <memory>
- #include <sstream>
- #include <string>
- #include <vector>
- using namespace std;
- class Data
- {
- public:
- Data(string data): data_(data)
- {
- cout << "Data constructed\n";
- }
- ~Data()
- {
- cout << "Data destructed\n";
- }
- const string& Get() const
- {
- return data_;
- }
- string& Get()
- {
- return data_;
- }
- private:
- string data_;
- };
- void ShareResource(shared_ptr<const Data> ptr)
- {
- stringstream ss;
- ss << "Shared resource " << ptr->Get() << " in " << this_thread::get_id() << ", counter = " << ptr.use_count() << endl;
- cout << ss.str();
- //ptr->Get().push_back('x');
- }
- vector<future<void>> spawn() {
- vector<future<void>> tasks;
- auto data = make_shared<const Data>("meow"); // Create shared_ptr
- for (int i = 0; i < 10; ++i) {
- tasks.push_back(async([data]() { // Capture shared_ptr by copy
- ShareResource(data);
- }));
- }
- return tasks;
- }
- int main()
- {
- cout << "Spawning tasks...\n";
- auto tasks = spawn();
- cout << "Done spawning.\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement