Run*_*ble 0 c++ pointers dependency-injection
如果构造函数Door看起来像这样:
Door::Door(Doorknob doorknob) : m_doorknob(doorknob) { }
Run Code Online (Sandbox Code Playgroud)
然后你会实例化Door这样的:
Doorknob doorknob;
Door door(doorknob); // Does an object copy of doorknob occur here?
Run Code Online (Sandbox Code Playgroud)
看起来如果你存储Doorknob为指针,你可以明确地避免副本:
Door::Door(Doorknob * doorknob_ptr) : m_doorknob_ptr(doorknob_ptr) { }
Run Code Online (Sandbox Code Playgroud)
实例化Door如下:
Door door(new Doorknob);
Run Code Online (Sandbox Code Playgroud)
但是现在你必须确保delete doorknob内部Door的析构函数,这似乎是丑陋的.
什么是首选方法?
更好的方法是传递const引用:
Door::Door(const Doorknob& doorknob) : m_doorknob(doorknob) { }
Run Code Online (Sandbox Code Playgroud)
否则,副本Doorknob将传递给构造函数并用作m_doorknob构造函数的参数.