It is not only possible; it is to be preferred to teach smart pointers before raw pointers.
Using smart pointers for single elements and `std::vector' for arrays a beginner can pretty much ignore everything about pointers that cause newbies problems.
Using smart pointers beginners also get to ignore some stuff related to exceptions, which trips up a lot of C++ programmers even at the intermediate level, because they will not need to understand how coding for exceptions can strongly alter interface design.
The differences between `malloc', `free', `operator new', `operator delete', the `new' operator, the `delete' operator, the `new' operator, and the `delete' operator can be set aside for a very long time.
I know someone is going to say it, so let me get there first: I never use those functions directly unless I'm writing something very low level. You do not need them "to create something non-trivial".