以下是C++Primer课本中定义的一个类
class StrVec{
public:
StrVec() :elements(nullptr), first_free(nullptr), cap(nullptr){}
StrVec(const StrVec&);
StrVec& operator=(const StrVec&);
~StrVec();
void push_back(const std::string&);
std::size_t size() const{ return first_free - elements; }
std::size_t capacity() const{ return cap - elements; }
std::string *begin()const{ return first_free; }
std::string *end()const { return first_free; }
private:
static std::allocator <std::string>alloc;
//被添加元素的函数所使用
void chk_n_alloc(){
if (size() == capacity()) reallocate();//????????????????????????????????????????
}
//工具函数,被拷贝构造函数,赋值运算符和析构函数所使用
std::pair<std::string*, std::string*>alloc_n_copy(const std::string*, const std::string*);
void free(); //销毁元素并释放内存
void reallocate(); //获得更多的内存并拷贝已有的元素
std::string *elements; //指向数首元素的指针
std::string *first_free; //指向数组第一个空闲元素的指针
std::string *cap; //指向数组尾后位置的指针
};
文中注释问好的地方:为什么函数chk_n_alloc可以调用reallocate函数?编译chk_n_alloc函数的时候,reallocate函数应该还没有声明过吧?为什么可以调用一个没有声明过的函数啊