如何传入 std::shared_ptr 但执行 "pass by reference" 作业?
how to pass in a std::shared_ptr but do "pass by reference" job?
我有一个主要功能,它接受一个 class 对象的引用,并尝试通过 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)) ?
}
您可以使用空别名共享指针:
bar(std::shared_ptr<MyStruct>(std::shared_ptr<MyStruct>(), &s));
在此调用中创建的临时共享指针与空共享指针共享所有权,因此它在销毁时不执行任何操作。
这可能有点乱。
我有一个主要功能,它接受一个 class 对象的引用,并尝试通过 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)) ?
}
您可以使用空别名共享指针:
bar(std::shared_ptr<MyStruct>(std::shared_ptr<MyStruct>(), &s));
在此调用中创建的临时共享指针与空共享指针共享所有权,因此它在销毁时不执行任何操作。
这可能有点乱。