【发布时间】:2014-11-12 12:27:34
【问题描述】:
请回答一些问题和声明以确认或修改以防万一。 我想确保我做对了,我很感谢任何提示。此外,我可以想象这些示例作为一个整体对 C++ 初学者有一定的价值。
- 堆栈启动对象
MyClass c(10);
MyClass c = MyClass(10);
据我了解,这两个对象初始化可以互换使用,对吗? 此外,当它们超出范围时会自动清理它们,例如从函数中返回。
- 堆启动对象
MyClass* c = new MyClass(10);
这个对象需要手动清理,比如“delete c”。
- 对象错误功能
MyClass* getObj() {
MyClass c(10); // stack initiated object
return &c;
}
这将返回一个指向我的堆栈范围的 MyClass 对象的指针(因为我没有使用 new 关键字)。 事实上,我不应该使用返回给它的指针,因为在使用时该对象可能已经被清理或稍后失败。对吗?
- 有效的对象复制功能
MyClass getObj() {
MyClass c(10); // stack initiated object
return c;
}
在这种情况下,堆栈启动对象的副本将返回对调用者的范围有效,对吗?
提前谢谢你。
亲切的问候, 赫尔曼
【问题讨论】:
-
MyClass c = new MyClass(10);必须是MyClass* c = new MyClass(10); -
拿一本好书读一读:stackoverflow.com/questions/388242/…
标签: c++ object heap-memory stack-memory