Add smartpointers && atomic