C++的new和delete关键字
其对自定义内省申请动态内存的操作是很简单的,我们直接看如下对自定义类型的操作。
区别于C语言的是,
new来申请自定义空间,会去调用构造函数
delete删除也会主动调用析构函数。
class A{
public :
A(int a)
:_a(a)
{
cout<<"A(int a)"<<endl;
}
A(const A& a1)
:_a(a1._a)
{
cout<<"A(const A& a1)"<<endl;
}
~A()
{
cout<<"~A"<<endl;
}
private :
int _a = 0;
};
template<class T1,typename T2>
void func(T1 a,T2 b)
{
return a+b;
}
int main(){
A* a = new A[5]{1,2,3,4,5};
delete []a;
char* aa = new char[100];
delete aa;//这种情况,既不会存在内存泄漏,也不会报错。但是用这种就不好
return 0;
}
因此有一种操作
类的内部禁用掉对应的operator new和operator delete那么,对这个类你就不能使用new和delete了
void* operator new(size_t size) =delete;
void operator delete(void* p)=delete;
new和delete实际都是调用的operator new和operator delete.
operator new:C++用来申请空间的。
operator delete:C++用来释放对应的空间。文章来源:https://www.toymoban.com/news/detail-850177.html
定位new
定位new表达式是在已分配的原始内存空间中调用构造函数初始化一个对象。
使用格式:
new (place_address) type或者new (place_address) type(initializer-list)
place_address必须是一个指针,initializer-list是类型的初始化列表
使用场景:
定位new表达式在实际中一般是配合内存池使用。因为内存池分配出的内存没有初始化,所以如果是自定义类型的对象,需要使用new的定义表达式进行显示调构造函数进行初始化。文章来源地址https://www.toymoban.com/news/detail-850177.html
到了这里,关于C++:new与delete的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!