(1) C++ 智能指针(std::shared_ptr和std::unique_ptr)不是可以自己回收内存吗,那么它创建对象是在哪个区域,全局区?代码区?堆?栈?
(2)结构体、枚举、Lambda表达式(Lambda表达式最终也会生成对象)它们创建的对象分别占用哪里的内存呢?
(3)通过智能指针创建对象是不是替代new创建对象的?
(1)不是,是存储在堆内存中的。当创建对象时,它们会通过new关键字分配堆内存。它们目的是管理动态内存,在不再需要对象时,自动回收其内存。
(2)结构体、枚举和Lambda表达式创建的对象可以分别存储在代码区、栈和堆上。具体的位置取决于它们的生存周期。
(3)不能。智能指针是一种对象,可以管理堆上的动态内存,但是它并不能替代 new 创建对象。在 C++ 中,可以通过 new 分配动态内存,也可以通过智能指针管理动态内存,这两者都可以用于创建对象,但是它们的目的和工作方式不同。
智能指针的唯一作用,就是自动delete对象。智能指针的对象是在堆里面,因为其它区域的会自动释放。
结构体 枚举 lambda表达式占用哪里的内存,由在哪里定义有关,在整个外面定义,则占全局内存,在某个方法内部则属于局部。
智能指针的出现是为了更加容易(更加安全)的使用动态内存,并不是代替new创建对象,两者使用场景不一样。