c++什么时候使用new,调用构造函数

文章讨论了在C++中如何调用构造函数创建对象,包括隐式和显示调用,以及使用new运算符进行动态内存分配。强调了构造函数不能由已存在的对象调用,因为它们用于初始化新对象。new运算符用于在运行时动态创建对象,解决了局部变量和全局变量的问题,但需要注意内存管理,防止内存泄漏。文章还提到了类接口和多态中的new使用,并指出动态数组的创建示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

new

补充:构造函数的调用

对象:可以调用成员函数,不可以调用构造函数
我们无法像调用成员函数那样使用对象来调用构造函数,因为在构造函数构造出对象之前,对象是不存在的,因此构造函数被用来创建对象,而不能通过对象来调用。
详见:构造函数的4种使用方式总结

  1. 隐式调用构造函数:Date d(1999,3,26);
  2. 显示调用构造函数:Date d = Date(1999,3,26);
  3. 使用new运算符:Date* d = new Date(1999,3,26);
  4. 使用列表初始化(C++11):Date* d = new Date{1999,3,26};
  5. tip:指针不会调用构造函数和析构函数,因此使用new在内存开辟空间调用构造函数(需要自己释放)
	Car *p1=new ConcreateDecorator01(new Bmw());
	p1=new ConcreateDecorator01(p1);
	p1->show();

一、new创建对象避免全局变量

错误调用:st只是局部变量,出了函数st就被销毁了,这样不利于传递参数等,那就得用全局变量了,而new就避免使用全局变量

void func()
{
	Student st;
	st.name="hello";
}
void main()
{
	func();
	cout<<st.name;//错误的调用
}

改正后:Student *st=new Student,利用new避免全局变量
c++里若想创建对象

  1. ClassName objec;//(初始化参数)
  2. Stack栈里面分配空间,自动释放。ClassName object=new ClassNam();
void func()
{
	Student *st=new Student;
	st->name="hello";
}
void main()
{
	func();
	cout<<st->name;//正确的调用
}

二、什么时候使用new

不确定需要多大的时候用new
类里面用new实现多态, 有的时候解决类
接口也用new, 这个一下说不清楚
用new有一定内存泄露的风险, 可以考虑用
ps:浅拷贝的解决

·
在这里插入图片描述
new创建在运行阶段 需要创建时就创建,不需要创建时还可以在运行时选择数组长度,
这就是int i; cin>>i; int a[i];不成功的原因,因为a[i]要在编译阶段就分配好内存,但是i在运行时才能知道
int i; cin>>i; int * a=new int[i];这样可以,因为都是在运行阶段才进行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值