我們假設我們有接口selector_interface_t
和此接口的實現pin_selector_t
。傳遞和存儲接口實現
class selector_interface_t
{
public:
virtual void select(uint8_t address) = 0;
virtual void deselect() = 0;
};
class pin_selector_t : public selector_interface_t
{
private:
uint8_t mask;
public:
pin_selector_t(uint8_t mask);
void select(uint8_t address);
void deselect();
};
而現在我們想傳遞對象巫實現了這個接口myclass_t
類和存儲以備將來使用其它myclass_t
方法(如:strobe
)。
class myclass_t
{
private:
selector_interface_t * selector;
public:
myclass_t(selector_interface_t & selector);
void strobe(uint8_t pin);
};
myclass_t::myclass_t(selector_interface_t & selector) // : selector(selector)
{
// ...
}
void myclass_t::strobe(uint8_t pin)
{
this->selector->select(pin);
this->selector->deselect();
}
唯一的方法是通過指針或引用傳遞實現。我更喜歡第二種解決方案,並通過參考。但是我不能簡單地將這個引用存儲在myclass_t
對象中,因爲對象的生存期和接口實現。複製一下會更好。但我不能有selector_interface_t
現場成員。我只能有這種類型的引用或指針。另一方面,我想避免使用malloc。我能用它做什麼?