做之间的区别是什么,
EventList temp;
EventList* temp = new EventList();
现在临时使用.
访问它的变量
另一个是->
除了那个差异,还有什么?只有EventList
在堆栈上时,指针才会在堆上分配。它主要是范围的东西吗?
答案 0 :(得分:5)
简短摘要
堆栈上的对象EventList temp;
堆上的对象EventList* temp = new EventList();
答案 1 :(得分:4)
Eventlist temp
在其调用范围内自动分配和释放。也就是说,当您运行以下代码时:
{
EventList temp;
}
EventList
的默认构造函数在其声明点被调用,析构函数在块的末尾被调用。
EventList *temp = new EventList();
在堆上分配。您可以阅读更多相关信息here。
答案 2 :(得分:0)
嗯,从这个例子来看,你所注意到的只是差异,但是当使用虚函数和继承时,你会看到差异。
例如,这里的代码与指针相同,但没有:
有指针:
#include <iostream>
using namespace std;
class Base
{
public:
virtual void Create()
{
cout <<"Base class create function ";
}
};
class Derived : public Base
{
public:
void Create()
{
cout<<"Derived class create function ";
}
};
int main()
{
Base *x, *y;
x = new Base();
y = new Derived();
x->Create();
y->Create();
return 0;
}
输出: 基类创建功能 派生类创建函数
没有指示:
#include <iostream>
using namespace std;
class Base
{
public:
virtual void Create()
{
cout <<"Base class create function ";
}
};
class Derived : public Base
{
public:
void Create()
{
cout<<"Derived class create function ";
}
};
int main()
{
Base x, y;
x.Create();
y.Create();
return 0;
}
输出: 基类创建功能 基类创建函数
因此对象和虚函数存在问题。当派生应该是执行基类函数时。这是差异之一。