void String::free() { if (elements) { std::for_each(elements,end, [this](char& c) {alloc.destroy(&c);}); alloc.deallocate(elements,end-elements); } }
/** * @brief destroy the elements and deallocate the space previously allocated. */ void StrVec::free() { if (element) // if not nullptr { //! destory it in reverse order. for (auto p = first_free; p != element; /* empty */) alloc.destroy(--p); alloc.deallocate(element, capacity()); } }
void free() { // may not pass deallocate() a nullptr. if (element_) { // move backward and use "--p" to delete [element_, free) // call type dtor, which is string dtor. for (auto p = free_; p != element_; /* empty */ ) alloc.destroy(--p); alloc.deallocate(element_, cap_ - element_); } }
/** * @brief Resizes it to the specified number of elements. * @param __new_size Number of elements it should contain. * @param __x Data with which new elements should be populated. * * This function will resize it to the specified * number of elements. If the number is smaller than the * current size the it is truncated, otherwise * the it is extended and new elements are populated with * given data. */ void StrVec::resize(std::size_t n, const std::string &s) { if (n < size()) { //! destroy the range : [element+n, first_free) using destructor for (auto p = element + n; p != first_free; /* empty */) alloc.destroy(p++); //! move frist_free point to the new address element + n first_free = element + n; } else if (n > size()) { for (auto i = size(); i != n; ++i) push_back(std::string(s)); } }
void str_vec::free() { for(std::string *p = first_free;p > elements;) alloc.destroy(--p); alloc.deallocate(elements,cap-elements); }
void String::free() { if (cStringBegin) { std::for_each(cStringBegin, cStringEnd, [this](char &c){alloc.destroy(&c);}); alloc.deallocate(cStringBegin, cStringEnd - cStringBegin); } }