关于c加加11 的预置以及弃置函数的作用,请详细说明
时间: 2023-11-28 10:47:50 浏览: 210
C++11引入了一些新的预置函数和弃置函数,这些函数可以帮助我们更好地管理对象的生命周期。
1. 预置函数
预置函数是在对象构造之前调用的函数,它们的作用是为对象做一些准备工作,比如分配内存、初始化成员变量等。C++11引入了一个新的预置函数,叫做std::aligned_alloc(),它可以帮助我们分配对齐的内存。在C++11之前,我们只能使用malloc()来分配内存,但是它不能保证内存对齐。std::aligned_alloc()的声明如下:
```cpp
void* aligned_alloc(std::size_t alignment, std::size_t size);
```
其中,alignment表示对齐方式,size表示需要分配的内存大小。如果分配成功,则返回指向已分配内存的指针;否则返回nullptr。
2. 弃置函数
弃置函数是在对象销毁之后调用的函数,它们的作用是释放对象占用的资源,比如释放内存、关闭文件等。C++11引入了两个新的弃置函数,分别是std::default_delete和std::unique_ptr。std::default_delete是一个函数对象,它可以被用来代替delete运算符,来销毁动态分配的对象。std::default_delete的声明如下:
```cpp
template <typename T>
struct default_delete {
void operator()(T* ptr) const noexcept;
};
```
其中,T表示要销毁的对象类型,ptr表示指向要销毁对象的指针。std::unique_ptr是一个智能指针,它使用了std::default_delete来管理动态分配的对象。std::unique_ptr的声明如下:
```cpp
template <typename T, typename Deleter = std::default_delete<T>>
class unique_ptr {
public:
explicit unique_ptr(T* ptr = nullptr, Deleter deleter = Deleter()) noexcept;
~unique_ptr();
...
};
```
其中,T表示指向的对象类型,Deleter表示用来销毁对象的函数对象类型,ptr表示指向要管理的对象的指针,deleter表示用来销毁对象的函数对象。当unique_ptr被销毁时,它会调用deleter函数对象来销毁对象。如果没有提供deleter函数对象,则使用std::default_delete来销毁对象。
总之,C++11引入的预置函数和弃置函数可以帮助我们更好地管理对象的生命周期,从而避免资源泄漏和内存泄漏等问题。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)