相干new的使用
有关new的使用请问一下两种方式,都使用的构造函数相同吗,为什么第一种要声明为指针的形式1.Employee* ane
有关new的使用
请问一下两种方式,都使用的构造函数相同吗,为什么第一种要声明为指针的形式
1.Employee* a=new Employee("abc",2);
a->print();
2.Employee a("abc",2);
a.print();
#include<iostream>
#include<string>
using namespace std;
class Employee
{
private:
string name;
int age;
public:
virtual void print();
Employee(const string s,int a)
{
name=s;
age=a;
}
};
void Employee::print()
{
cout<<"Name:"<<name<<endl;
cout<<"Age:"<<age<<endl;
}
void main()
{
//Employee a=new Employee("abc",2);
//a->print();
Employee a("abc",2);
a.print();
int b;
cin>>b;
}
[解决办法]
[解决办法]new出来的对象是在堆内存申请的,会一直存在,直到delete(),而直接定义的对象实在栈内存中被创建的,当离开作用域以后,会自动被回收,不是一直存在的。区别仅此而已~~但要注意什么时候用什么定义
[解决办法][解决办法]new可以看成是一个函数,它的左边是=号,=号的左边,是存放返回值的地方(左值),而new这个函数返回的是一个指针,所以对应的,存放它的返回值的变量必须是个指针变量。
如果说的不够直观,看这个可能比较容易理解:
Employee* 山寨new(const char* a,int b)
{
……//此处省略N行代码——分配内存,根据参数a,b,制造一个在全局作用域存在的c
//当然不可能是——Employee d(a,b);因为这样制造出来的对象d,在这个函数结束后就消失了,所以返回这个d的地址,只会坑了调用这个函数的用户的爹。
return &c;
}
不知道我说的对不,其实我也是个新手,菜鸟,说错了别怪我误导人啊。哈哈