Do we want to enforce smart pointers only like with resources by making constructor private and exposing a factory static method?