Please refer to Wikipedia:Strategy Pattern (C++)
class Context
{
private:
StrategyInterface * strategy_;
public:
explicit Context(Strate
Well, explicit constructors are always safe, but can be inconvenient. explicit ensures a compilation error should you provide a StrategyInterface* where a Context is expected. In doing so, it prevents construction of a temporary Context. This becomes particularly important in certain circumstances, e.g.:
Context takes ownership of the pointed-to StrategyInterface, and deletes it in the destructorContext construction/destruction performs other expensive or inappropriate actionsContext and a StrategyInterface* produce a compile-time error, result in comparing StrategyInterface*s, StrategyInterfaces or Contexts?)If a Context is practically a drop-in-replacement for a StrategyInterface, just with some minor logging or other enhancements, then it may be appropriate to allow implicit construction, much as std::string can be constructed from const char*. When they're clearly independent things, or when the lifetime of a Context should exist beyond any given usage of a StrategyInterface, then an explicit constructor's indicated.
(Note: these guidelines are pretty rough - more a starting point than an end - comments welcome)
Because it's generally a good idea to use explicit unless you really want to allow implicit conversion. Since you're unlikely to use a Context object in a situation where you really gain anything from an implicit conversion, you're better off making it explicit.