琴长不过时光 发表于 2020-1-20 17:37:08

请人看看这个是不是内存泄漏

请人看看这个是不是内存泄漏

Croper 发表于 2020-1-20 19:45:44

第一,是。
第二,你这是照着C的教材在学C++么?写得不伦不类的。。

琴长不过时光 发表于 2020-1-20 19:58:53

Croper 发表于 2020-1-20 19:45
第一,是。
第二,你这是照着C的教材在学C++么?写得不伦不类的。。

晕死 怎么不伦不类 你说一下 我好改进 我这是照传智扫地僧的视频写的

琴长不过时光 发表于 2020-1-20 20:00:05

Croper 发表于 2020-1-20 19:45
第一,是。
第二,你这是照着C的教材在学C++么?写得不伦不类的。。

我懂了 是既用malloc又用new运算符是吧 我这个视频是从c 过渡到C++的

琴长不过时光 发表于 2020-1-20 20:02:37

Croper 发表于 2020-1-20 19:45
第一,是。
第二,你这是照着C的教材在学C++么?写得不伦不类的。。

兄台 问一下 是不是只要写有参构造函数 默认的拷贝构造函数C++编译器就不提供了那样假如obj2 = obj1;也不能调用默认的前拷贝了?

Croper 发表于 2020-1-20 20:13:03

琴长不过时光 发表于 2020-1-20 19:58
晕死 怎么不伦不类 你说一下 我好改进 我这是照传智扫地僧的视频写的

第一、string.h和malloc.h都是C的库文件。C++里的标准化版本是cstring和memory;C++的库里包含string.h和malloc.h,直接上C++就不应该用这两个库。
第二、既然是C++为什么要用二重指针,指针的引用它不香么?int operateTeacher(Teacher*& p) {
        if (p == nullptr) {
                p = new Teacher;
        }
        //.....
}

int main() {
        Teacher* pC = new Teacher;
        //......
        operateTeacher(pC);
}
第三、如果是我的话肯定是不会用operateTeacher这种函数名的,它和运算符重载operator Teacher长得太像了。

琴长不过时光 发表于 2020-1-20 20:18:46

Croper 发表于 2020-1-20 20:13
第一、string.h和malloc.h都是C的库文件。C++里的标准化版本是cstring和memory;C++的库里包含string.h和 ...

哦哦 谢谢 指点

Croper 发表于 2020-1-20 20:18:53

琴长不过时光 发表于 2020-1-20 20:02
兄台 问一下 是不是只要写有参构造函数 默认的拷贝构造函数C++编译器就不提供了那样假如obj2 = obj1;也 ...

第一、提供了有参构造函数编译器就不会为你提供默认构造函数了,但是复制构造函数任然会提供。
你说你不能调用默认复制构造函数的话肯定不是这儿的原因。你可以发一下源代码。
第二,即使编译器没有默认提供,你也可以使用struct A {
        A() = default;
        A(const A&) = default;
};
强制让编译器提供默认版本。

Croper 发表于 2020-1-20 20:20:37

C++的库里包含string.h和malloc.h
这里少打两个字,应该是“C++的库里包含string.h和malloc.h是为了兼容C语言的代码”
页: [1]
查看完整版本: 请人看看这个是不是内存泄漏