You don't seem to have an object that inherits from Book::Secure, just a smart pointer to the abstract base class. When you dereference the smart pointer that has never been set to point to an actual object, you get a crash.
Clarification:
1) You need an instantiable class that inherits from Book::Secure
namespace Book
{
class Foo : public Secure
{
public:
virtual Result setPassword(const std::map<std::string, std::vector<std::string> >& params) {
cout << "setPassword called" << endl;
}
}
}
2) You need to instantiate the class and make your smart pointer point to it before you use the smart pointer:
secure.reset( new Foo() );