Z hlediska programátora - musí se rozmyslet, kde objekt založí - heap nebo stack, kdo bude vlastníkem, kdy je případně třeba vlastnictví předat, nově do toho přichází unique/shared. To vše ovlivňuje jak se bude objekt předávat dál (hodnota, reference, pointer, ...), jak bude algoritmus navržen atd. U složitějších algoritmů to v podstatě vede na to, že programátor píše vlastní obdobu GC zas a znovu.
Z hlediska runtime - je zde mnohem složitější logika jak při alokaci tak dealokaci, výkonnostní dopady v případě sdílených pointerů, nevyhnutelné problémy jako např. defragmentace. To následně dále vyvolává tlak na programátora, aby tomu ještě víc přizpůsoboval design programu, musel optimalizovat apod.
Ve výsledku je programátor nucen zabývat se těmito aspekty v C++ násobně déle než kolik na to je potřeba třeba v javě (ale vlastně v čemkoli co má rozumný GC).
Jedinou výhodu kterou za to dostaneme jsou nižší paměťové nároky a někdy se může hodit deterministická dealokace. Samozřejmě existují případy, kdy je lepší to psát v C++ (programátor je dostupnější než RAM), ale většinou jsou výše uvedená negativa příliš.