1. 定义Vector的数据结构 c #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { void** data; // 指向数据元素的指针数组 size_t size; // 当前存储的元素个数 size_t capacity; // 数组容量 size_t elem
这样两个指针将指向不同的对象,其中的一个对象是另一个对象的副本,缺点是浪费空间,所以智能指针都未采用此方案。 建立所有权(ownership)概念。对于特定的对象,只能有一个智能指针可拥有,这样只有拥有对象的智能指针的构造函数会删除该对象。然后让赋值操作转让所有权。这就是用于auto_ptr和uniqiie_ptr 的策略,但uniq...
TextQuery::TextQuery(ifstream& is) : file(newvector<string>){stringtext;while(getline(is, text)){//读文件的每一行file->push_back(text);intn = file->size() -1;//当前行号istringstreamline(text);//将行文本分解为单词stringword;while(line >> word){//非常重要,必须用引用,要不然就会拷贝一...
CAutoVectorPtr 类似于 CAutoPtr,唯一的区别是 CAutoVectorPtr 使用vector new[] 和vector delete[] 分配和释放内存,而不是 C++ new 和delete 运算符。 如果需要 CAutoVectorPtr 的集合类,请参阅 CAutoVectorPtrElementTraits。有关使用智能指针类的示例,请参阅 CAutoPtr。
unique_ptr:c++11版本,独占对所指对象的独有权,不允许其他的智能指针共享其内部的指针,禁止进行拷贝构造和拷贝赋值的操作,但是unique_ptr允许通过函数返回给其他的unique_ptr,还可以通过std::move来把所有权转让到其他的unique_ptr,注意,这时它本身就不再拥有原来指针的所有权了。将一个 unique_ptr 赋值给另一个时...
调整本文中的数据结构 Vector 内部的数组大小是一种开销很大的操作,因为它需要调用 realloc() 函数。realloc() 函数会调整指针指向的那片内存空间的大小,并返回一个指向调整后内存空间的指针。如果当前内存区域没有足够的剩余空间来扩展当前的内存空间,那么 realloc() 会开辟一片新的内存区域,并且将指针指向的旧内存...
2) 浅拷贝使得两个指针都指向同一块内存,任何一方的变动都会影响到另一方。 3) 同一个空间,第二次释放失败,导致无法操作该空间,造成内存泄漏。 31. stl各容器的实现原理(必考) 1) Vector顺序容器,是一个动态数组,支持随机插入、删除、查找等操作,在内存中是一块连续的空间。在原有空间不够情况下自动分配空间...
了解std::vector的方方面面和底层实现 vector是动态扩容的,2的次方往上翻,为了确保数据保存在连续空间,每次扩充,会将原member悉数拷贝到新的内存块; 不要保存vector内对象的指针,扩容会导致其失效 ;可以通过保存其下标index替代。 运行过程中需要动态增删的vector,不宜存放大的对象本身 ,因为扩容会导致所有成员拷贝构...
智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针。 每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;对一个...
vector<int>::iterator iter; iter = dataVector.begin()+4; iter = std::advance(dataVector.begin(), 4); iter = std::next(dataVector.begin(), 4); 单例 class FSingle { public: static FSingle* getInstance() { static FSingle GlobalInstance; ...