如何传入std :: shared_ptr但是“通过引用传递”工作?

时间:2017-10-25 22:19:16

标签: c++ c++11 pass-by-reference smart-pointers

我有一个main函数,它接受类对象的引用并尝试通过foo()bar()更新它,但是,bar()只允许传入shared_ptr类型。假设我不允许修改bar()的签名,我怎样才能保证它的行为符合预期。

void foo(MyStruct& s) {
  modifyS(s);
}

void bar(std::shared_ptr<MyStruct> s) {
  modifySAgain(s);
}

mainFunction(MyStruct& s) {
  foo(s);
  // bar(?) how should I do here such that s would be modified by bar()
  // bar(std::make_shared<Mystruct>(std::move(s)) ?
}

1 个答案:

答案 0 :(得分:4)

您可以使用空别名共享指针:

bar(std::shared_ptr<MyStruct>(std::shared_ptr<MyStruct>(), &s));

在此调用中创建的临时共享指针与空共享指针共享所有权,因此它在销毁时不执行任何操作。

这可能是一个黑客攻击。