您的位置:首页 > 编程语言 > C语言/C++

20170119C++阶段班04_STL_04MyVector练习讲解

2017-01-19 18:48 232 查看

MyVector讲解及编程注意点:

1:array类是一个容器,可以包含其他类,但目前还没深入学习泛型等知识,只做一个可以包含MyString类的MyVector。

2:类之间要互相调用的话,不要在库中包含其他库文件,应该用前置声明才好。前置声明后只能使用其指针或者引用,不可以使用对象。在cpp里面可以包含使用的类的库之后,然后就可以调用MyString了。
3:size_t会根据环境的不同,长度发生改变。这样才可以跨平台。size_t和std::size_t:前者是C语言的。后者是标准C++的,和string.h与cstring的关系差不多。
4:拷贝构造函数和赋值函数等要注意是否为自身的问题。memcpy等函数传递的长度为字节的size,应该*sizeof(MyString),其次就是注意内存泄漏。
5:stl就是将一些逻辑抽象出来,用符号表示。要把类用在vector里面,需要重载很多运算符。MyVector里面会大量使用MyString里面重载的=号和其他运算符,如果自己写的类没写这些运算符的重载,就可能导致MyVector无法很好的使用。这也是运算符重载带来的意义。
6:new的长度为0的话不会报错,也不会new出空间。memcpy也是一样。但是new之后指针就不再为nullptr,他有一个地址了。编程也最好不要出现nullptr。
7:每个类对象的大小是一样大的(比如任何一个string类的对象,sizeof(string)都为28),其他自己写的类也一样。
    但是类里面的数据不一定一样大,string类里面的字符串就不一样大。所以用sizeof(string)可以用在多个类对象的拷贝里面求长度。vector<string>里面保存的“数组”也是等大小的,可以用指针++来获取每一个对象的位置。
    如果用memcpy来拷贝指向类对象的指针的时候一定注意类对象里面的数据有不有指针,如果有,这个memcpy就存在浅拷贝。memcpy本身是拷贝指针指向的内容,但这个类容也是指针的话就错在浅拷贝,平时一定注意!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程