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.:
- Contexttakes ownership of the pointed-to- StrategyInterface, and deletes it in the destructor
- Contextconstruction/destruction performs other expensive or inappropriate actions
- it disambiguates some operations implicitly, and makes others ambiguous, where it might be more appropriate to have the programmer consider how to resolve the ambiguity (e.g. should an attempt to compare a Contextand aStrategyInterface*produce a compile-time error, result in comparingStrategyInterface*s,StrategyInterfaces orContexts?)
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)