調用我有一個類X
,我想一個成員函數bar
傳遞給另一個類Y
,將其存儲在一個載體,在其他時間調用它的存在。在向量保存成員函數,並確保對象仍然當後來
據我所知,當Y
調用函數時,我需要確保X
仍然存在。我怎麼做?
在我下面的例子中,我最初想,如果我通過一個shared_ptr來bar
這將做我想做的 - 只要Y
存在即的,那麼將X
,爲Y
持有一個shared_ptr到一個其成員函數。
我很確定現在這個邏輯是不正確的。有人可以請賜我嗎?
class Y {
std::vector<std::shared_ptr<std::function<void()>>> m_v;
public:
void foo(const std::shared_ptr<std::function<void()>>& callback) {
m_v.push_back(callback);
}
void sometime_later() {
// invoke call back function in vector
// how do I ensure the object I want to call the function on still exists
}
};
class X {
Y& m_y;
public:
X(Y& y) : m_y(y) {
m_y.foo(std::make_shared<std::function<void()>>(std::bind(&X::bar, this)));
}
void bar() {
// do some stuff
}
};
您不能使用比foo,bar,X和Y更富有表現力的名稱來使代碼更具可讀性,並且這個想法更易於理解嗎? –
你說的沒錯,持有一個'shared_ptr'到一個'std :: function',一個'X'的成員函數被綁定到''''''實例的生命週期根本沒有任何影響。沒有關於你最終想要做什麼的背景,推薦解決方案有點困難。 – melak47
我不認爲'std :: shared_ptr'的矢量會做你想做的。你正在共享一個'std :: function'而不是'X'的實例。你應該思考當std :: shared_ptr被刪除時它會刪除什麼。 – quamrana