new 运算符 和 delete运算符
Person * p = new Person 会返回一个Person指针
默认调用构造函数,开辟空间,返回不是void* ,不需要强制转换
delete释放
new 对象 用void* 去接受,释放不了对象
new出来的是数组 ,如何释放? delete [] …
new出来的是数组,肯定会调用默认构造
// 37.new的使用.cpp : 定义控制台应用程序的入口点。
//
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class Person
{
public:
Person()
{
cout << "默认构造调用" << endl;
}
Person(int a)
{
cout << "有参构造调用" << endl;
}
~Person()
{
cout << "析构函数调用" << endl;
}
};
void test01()
{
//Person p1; 栈区开辟
Person * p2 = new Person; //堆区开辟
//所有new出来的对象 都会返回该类型的指针
//malloc 返回 void* 还要强转
//malloc会调用构造吗? 不会 new会调用构造
// new 运算符 malloc 函数
//释放 堆区空间
// delete也是运算符 配合 new用 malloc 配合 free用
delete p2;
}
void test02()
{
void *p = new Person(10);
//当用void* 接受new出来的指针 ,会出现释放的问题
delete p;
//无法释放p ,所以避免这种写法
}
void test03()
{
//通过new开辟数组 一定会调用默认构造函数,所以一定要提供默认构造
Person * pArray = new Person[10];//调用10次构造函数
//Person pArray2[2] = { Person(1), Person(2) }; //在栈上开辟数组,可以指定有参构造
//释放数组 delete []
delete[] pArray;
}
int main(){
//test01();
//test02();
test03();
system("pause");
return EXIT_SUCCESS;
}
C++内存管理:new与delete详解
本文详细解析了C++中new和delete运算符的使用,包括它们如何分配和释放内存,以及与构造函数和析构函数的关联。探讨了new与malloc的区别,new数组的正确释放方式,以及使用void*指针接收new对象的潜在问题。
1084

被折叠的 条评论
为什么被折叠?



