【发布时间】:2020-09-11 10:40:29
【问题描述】:
我有两个类,foo 和bar,其中bar 包含指向foo 的指针,如下所示。
#include<iostream>
#include<memory>
class foo {
private:
int num{4};
public:
void sum(const int& to_add) {num += to_add;}
int access_num() {return num;}
};
class bar {
private:
std::shared_ptr<foo> ptr;
public:
void change_ptr(foo& f) {
auto new_ptr = std::make_shared<foo>(f);
ptr = std::move(new_ptr);
}
std::shared_ptr<foo> access_ptr() { return ptr; }
};
如果我想通过bar中的指针执行foo的成员函数sum(),该怎么做?
目前,正在尝试
foo f;
std::shared_ptr<bar> bar_ptr = std::make_shared<bar>();
bar_ptr->change_ptr(f);
// Add three to the int stored in f via the pointer
bar_ptr->access_ptr()->sum(3);
std::cout << f.access_num() << std::endl;
不工作,输出4。
【问题讨论】:
-
在您的示例中,
bar对象中的shared_ptr不指向f。change_ptr创建一个新的foo对象。这是它应该如何工作的? -
不,不是这样,那将是我出错的地方。如何在不创建新对象的情况下创建指向
f的指针? -
foo *pf = &f; -
@scs-erin
auto new_ptr = ptr -
一般来说,您不能创建指向现有对象的共享指针,因此您可能需要重新考虑您的
change_ptr(foo& f)接口。用change_ptr(shared_ptr<foo> f)替换它怎么样?
标签: c++ pointers shared-ptr