man*_*704 99 c++ constructor new-operator
在C++中,
除了动态内存分配之外,以下两行代码之间是否存在功能差异:
Time t (12, 0, 0); //t is a Time object
Time* t = new Time(12, 0, 0);//t is a pointer to a dynamically allocated Time object
Run Code Online (Sandbox Code Playgroud)
我当然假设定义了一个Time(int,int,int)ctor.我也意识到在第二种情况下,t将需要删除,因为它是在堆上分配的.还有其他区别吗?
gre*_*ade 119
这条线:
Time t (12, 0, 0);
Run Code Online (Sandbox Code Playgroud)
... Time在本地范围内分配一个类型的变量,通常在堆栈上,当它的作用域结束时将被销毁.
相比之下:
Time* t = new Time(12, 0, 0);
Run Code Online (Sandbox Code Playgroud)
...通过调用::operator new()或分配一块内存Time::operator new(),然后Time::Time()使用thisset 调用该内存块中的一个地址(并且还作为结果返回new),然后存储在该内存块中t.如你所知,这是一般的堆(默认)完成,并要求您delete在以后的节目,而指针t则一般存储在堆栈上.
Man*_*j R 31
另一个明显的区别是访问t的变量和方法.
Time t (12, 0, 0);
t.GetTime();
Time* t = new Time(12, 0, 0);
t->GetTime();
Run Code Online (Sandbox Code Playgroud)
我认为您已经了解所有差异。假设您非常了解通过指针和变量访问 t 成员的语法差异(好吧,指针也是一个变量,但我想您明白我的意思)。并假设您知道将 t 传递给函数时按值调用和按引用调用的区别。我认为您也了解如果将 t 分配给另一个变量并通过该另一个变量进行更改会发生什么。根据 t 是否为指针,结果会有所不同。