Proper Way to Create a New TSharedPtr?

I’m trying to create a new TSharedPtr and store a TMap inside of it, however the TSharedPtr is always null. I’m trying to create it in my constructor.

UTBSUnitMovementComponent::UTBSUnitMovementComponent()
	: ObstructionType {EObstructionType::PlayerAlly}
{
	TSharedPtr<TMap<ATBSMoveSpace *, FMovePairStruct>> MoveMap (new TMap<ATBSMoveSpace *, FMovePairStruct>());
	tempsphere = CreateDefaultSubobject<USphereComponent>(TEXT("Sphere"));
}

Then I try adding elements to the TMap in a for loop:

	for (auto elem : testoverlap) {
		MoveMap->Emplace(StaticCast<ATBSMoveSpace *>( elem.GetActor()), hello);
	}

It crashes when trying to iterate because I’m not checking for nullptr, which is fine for now. Is my Initialization wrong?
I’m also confused on proper declaration of smart pointers. It looks like this in my .h but I’m not confident that it’s correct:

TSharedPtr <TMap<ATBSMoveSpace *, FMovePairStruct>> MoveMap;

Thank you for any help!