这有什么区别:
Myclass *object = new Myclass();
Run Code Online (Sandbox Code Playgroud)
和
Myclass object = new Myclass();
Run Code Online (Sandbox Code Playgroud)
我已经看到很多C++库如wxWidgets,OGRE等使用第一种方法......为什么?
Joe*_*ips 69
Myclass *object = new Myclass(); //object has dynamic storage duration (usually is on the heap)
Myclass object; //object has automatic storage duration (usually is on the stack)
Run Code Online (Sandbox Code Playgroud)
如果计划在很长一段时间内使用它们,并且创建具有自动存储持续时间(通常在堆栈上)的对象的生命周期很短(或范围),则可以创建具有动态存储持续时间的对象(通常在堆上).
Ben*_*oît 43
第二个错了!
你可以用
MyClass object;
Run Code Online (Sandbox Code Playgroud)
那可行.
现在,关于如何在这两种可能性之间做出选择,它主要取决于你的物体应该存活多久.看到那里得到彻底的答案.
小智 24
你的第一行100%正确.不幸的是,你不能用c ++中的第二行创建对象.有两种方法可以在c ++中创建/创建一个对象.
第一个是:
MyClass myclass; // if you only need to call the default constructor
MyClass myclass(12); // if you need to call constructor with parameters*
Run Code Online (Sandbox Code Playgroud)
第二个是:
MyClass *myclass = new MyClass();// if you only need to call the default constructor
MyClass *myclass = new MyClass(12);// if you need to call constructor with parameters
Run Code Online (Sandbox Code Playgroud)
在c ++中如果使用new关键字,对象将存储在堆中.如果您长时间使用此对象并且如果使用第一种方法,它将非常有用,它将存储在堆栈中.它只能在短时间内使用.注意:如果使用new关键字,请记住它将返回指针值.您应该声明名称*.如果使用第二种方法,则不会删除堆中的对象.您必须使用delete关键字自行删除:
delete myclass;
Run Code Online (Sandbox Code Playgroud)
Wel*_*bog 13
所述new操作者将指针返回到它创建的对象,所以表达式Myclass object = new Myclass();是无效的.
其他语言没有像C++这样的显式指针,因此您可以编写类似的语句Myclass object = new Myclass();,但在C++中这是不可能的.返回类型new Myclass();是指向Myclass对象的指针,即Myclass *.
第一个示例创建一个指向MyClass的指针,并将其初始化为指向new运算符的结果.
第二个可能无法编译,因为它正在尝试创建一个MyClass对象并将其分配给MyClass指针.这可能适用于你有一个接受MyClass指针的MyClass构造函数的不太可能的事件.
您的第一个代码行是正确的,而第二个代码行不正确.
Myclass object=new Myclass(); //Incorrect code
Run Code Online (Sandbox Code Playgroud)
上面的代码不正确,因为新的Myclass(); 返回指向class和Myclass对象的指针; 声明类的对象,并且您尝试将指向类的指针分配给类的对象,这是不正确的.
您的第一个代码行是正确的.但是这声明了指向类而不是类对象的指针.
Myclass *object = new Myclass(); //declares pointer to class.
Run Code Online (Sandbox Code Playgroud)
要声明类的对象,您应该编写以下代码.
Myclass object; //declares object of class Myclass
Run Code Online (Sandbox Code Playgroud)
但是你应该注意,使用指向类和使用类的对象访问类成员的方式是不同的.以下是访问类成员的代码.
pointer_to_class->member; // accessing class member using pointer to class
object.member; //accessing class member using object of class
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82842 次 |
| 最近记录: |