我首先学习了C#,现在我开始使用C++.据我所知,newC++中的operator 与C#中的operator 不相似.
你能解释一下这个示例代码中内存泄漏的原因吗?
class A { ... };
struct B { ... };
A *object1 = new A();
B object2 = *(new B());
Run Code Online (Sandbox Code Playgroud) 我一直在研究如何在C++中创建一个类的实例.似乎有几种方法可以做到这一点:
ClassExample classExample1;
ClassExample classExample2();
ClassExample classExample3(void);
ClassExample classExample4 = ClassExample();
Run Code Online (Sandbox Code Playgroud)
1和4调用默认构造函数.当我使用2和3时,我似乎无法引用变量并且它们未初始化.在调试器中,它们被逐步调整.为什么是这样?这些都一样吗?有什么不同?有首选吗?
当我们有参数传递时,有两种方法可以做到这一点:
ClassExample classExample1(true, 1, "");
ClassExample classExample2 = ClassExample(true, 1, "");
Run Code Online (Sandbox Code Playgroud)
再说一次,有区别吗?什么是首选方案?
UPDATE
C++ 11还引入了这种初始化形式:
ClassExample classExample2{ };
Run Code Online (Sandbox Code Playgroud)
这是以下的平等:
ClassExample classExample2();
Run Code Online (Sandbox Code Playgroud) 考虑代码段:
ClassName* p;
p = new ClassName;
Run Code Online (Sandbox Code Playgroud)
据我了解,我们正在从堆中分配内存到存储*p.
但现在考虑:
ClassName C;
Run Code Online (Sandbox Code Playgroud)
问题:如果不是从堆中,内存C来自哪里?