下面的说法有几个是正确的? 1. shared_ptr模板实例化出来的智能指针对象在消亡的时候会delete 其托管的指针 2. 可以用变量初始化右值引用 3. lambda 表达式也可以递归调用自身 4. 如果没写移动构造函数,编译器会自动生成一个 A) 1 B) 2 C)3 D)4
时间: 2023-06-16 11:07:40 浏览: 44
A) 1 是正确的。shared_ptr模板实例化出来的智能指针对象在消亡的时候会delete其托管的指针。
B) 2 是正确的。可以用变量初始化右值引用。
C) 3 是正确的。lambda 表达式也可以递归调用自身。
D) 4 是错误的。如果没有自己定义移动构造函数,编译器会自动生成一个默认的移动构造函数。但是如果类中含有资源需要管理(如指针),需要自己定义移动构造函数来正确地管理资源。
相关问题
14.以下哪些不是C++ STL提供的智能指针? A sudo_ptr B week_ptr C shared_ptr D unique_ptr
C++ STL提供的智能指针有auto_ptr、shared_ptr和unique_ptr,而sudo_ptr和week_ptr不是C++ STL提供的智能指针。其中,auto_ptr已经被C++11标准废弃,建议使用unique_ptr代替。shared_ptr和unique_ptr都是C++ STL提供的智能指针,其中shared_ptr采用引用计数的方式管理内存,而unique_ptr采用独占式的方式管理内存,即同一时间只能有一个unique_ptr指向某个对象。下面是一个unique_ptr的例子:
```cpp
#include <iostream>
#include <memory>
int main() {
std::unique_ptr<int> p(new int(42));
std::cout << *p << std::endl; // 输出:42
*p = 24;
std::cout << *p << std::endl; // 输出:24
return 0;
}
```
7. 关于shared_ptr的说法,错误的是:(10分) A.使用make_shared代替new生成shared_ptr B.shared_ptr可以用于管理单一对象的智能指针。 C.同一个对象的指针,可以shared_ptr和原生指针混用。 D.对于返回自身的shared_ptr指针的对象,要从enable shared from this类派生
C.同一个对象的指针,可以shared_ptr和原生指针混用。
这个说法是错误的。在使用shared_ptr时,应该避免将原生指针和shared_ptr混用,因为这可能导致资源管理的错误和潜在的内存泄漏。应该始终使用shared_ptr来管理资源的生命周期,避免手动释放资源。同时,为了避免循环引用导致的内存泄漏,当一个对象需要返回自身的shared_ptr指针时,应该从enable_shared_from_this类派生。