![]() |
1
2
|
![]() |
2
14
编辑: 关于分配。
声明指向
接线员
现在
(
之后
|
![]() |
3
4
仅仅声明一个指针不会分配内存来保存类,也不会调用构造函数。您必须调用new操作符来实际分配内存并提供对象初始化。另外,不需要强制转换new的返回类型。 哦,我还必须告诉你,在C++中,你几乎应该总是寻找其他方式来比手动管理内存,这些容器类(STD::vector,STD::DeQuoGuffer-like)和智能指针,这两个都使得管理内存更少痛苦。 |
![]() |
4
2
这实际上并没有为MyClass对象分配内存。您的变量只是一个指针,有可能跟踪MyClass对象的内存地址,但是还没有创建这样的对象,并且指针没有被设置为指向任何地方。 (当然,会为指针本身分配一些内存,但如果该语句位于函数内部,则内存在堆栈上,否则为全局内存)
那你就不用去想那些记忆了。缺点是对象只有在离开创建它的作用域时才存在,如{和}的嵌套所示。
过一段时间,你也会想删除t1。 MyClass的实际大小可能不是9字节。。它取决于编译器,可能是编译器命令行标志、编译器版本、目标内存模型、操作系统等的函数。。 |
![]() |
5
2
除了其他一些答案外:
有关更多信息,请参阅 C++ Reference Guide - New C++ Cast Operators |
![]() |
6
1
如果你这样做
您只是声明了一个指向类MyClass的指针。你没有真正分配任何内存。为了创建该类的实例,您可以使用以下任一方法:
前两个声明使用自动存储,而最后一个声明使用动态存储。如果为类定义参数化构造函数,则声明如下:
|
![]() |
7
1
-
或者
-如果在执行新操作后不删除指针ptr,那么肯定是内存泄漏 |
![]() |
8
1
不要假设MyClass使用9字节,这取决于机器和编译器! MyClass*t1; 那会给你一个有用的机会 指针 ,但尚未分配容纳类的空间。所以前两个问题的答案是否定的。 是的,如果你想使用指针,你必须为自己的类分配空间。当然,您可以通过在堆*上创建MyClass来消除内存分配: MyClass t1();
|
![]() |
9
0
类不能为9字节。如果编译器通过填充结构使其更好地适应计算机体系结构,那么它可能会更多。 MyClass*t1;没有提供可用的地址。它是一个未初始化的指针,指向一个随机的内存位置,不知道该地址可能是什么。它不会为您分配任何空间来存储MyClass实例,也不会调用构造函数。我建议您在定义指针时初始化它们:
您需要为类保留空间并调用构造函数新的'为你做这两件事。
别忘了你需要一个'删除'来匹配每一个新的,否则你会写一个内存泄漏。 |
![]() |
TheKing · 为什么数组的地址可以有负值? 3 年前 |
![]() |
yurnero · MATLAB:“加载”一个快速访问功能 7 年前 |
![]() |
joe · 一页可以同时在两个工作集中吗? 7 年前 |
![]() |
Jaques · “.exe”已触发断点 7 年前 |
![]() |
adn bps · 在函数中修改变量的高效内存方法 7 年前 |
![]() |
Gauraang Khurana · C语言中分段错误的不稳定行为 7 年前 |
![]() |
Rajesh K · 如何查找设备中存在的广告垃圾? 7 年前 |