strblob.h
strblob.cpp#include#include#include#iclude#inlude#ifndef strblob__h
#define strblob__h
class strblob
strblob(const std::initializer_list&li): data(std::make_shared>(li)) {}
size_type size() const
bool empty() const
void push_back(const std::string &str)
void pop_back();
std::string& front() const;
std::string& back() const;
private:
std::shared_ptr> data;
void check(const size_type &i, const std::string &msg) const;
};class strblobptr ;
strblobptr(strblob &sb, const size_t &sz) : w_ptr(sb.data), curr(sz) {}
std::string& deref();
void incr();
private:
std::shared_ptr> check(const std::string &msg) const;
std::weak_ptr> w_ptr;
size_t curr;
};#endif
感覺strblobptr就是強行使用weak_ptr,並沒有實際的用途,除非strblob物件銷毀了,shared_ptr指標data銷毀了,weak_ptr指標w_ptr的check操作才會起到作用,但是不明白為什麼不直接使用strblob物件來訪問data,而要strblobptr來訪問呢?#includevoid strblob::pop_back()
std::string& strblob::front() const
std::string& strblob::back() const
void strblob::check(const std::string& msg) const
std::string& strblobptr::deref()
void strblobptr::incr()
std::shared_ptr> strblobptr::check(const std::string &msg) const
ifstream is("map.dat");
string line;
strblob sb;
strblobptr sbp(sb, 0);
while(getline(is, line))
cout
while(1) catch(out_of_range e) catch(runtime_error e)
}
C 動態記憶體
了解動態記憶體在 c 中是如何工作的是成為一名合格的 c 程式設計師必不可少的。c 程式中的記憶體分為兩個部分 很多時候,您無法提前預知需要多少記憶體來儲存某個定義變數中的特定資訊,所需記憶體的大小需要在執行時才能確定。在 c 中,您可以使用特殊的運算子為給定型別的變數在執行時分配堆內的記憶體,這會...
C 動態記憶體
棧 在函式內部宣告的所有變數都將占用棧記憶體 堆 這是程式中未使用的記憶體,在程式執行時可用於動態分配記憶體 new和delet運算子 動態分配記憶體的通用語法 new data type 如果自由儲存區已被用完,可能無法成功分配記憶體。所以建議檢查 new 運算子是否返回 null 指標,並採取以...
C 動態記憶體
到目前為止,我們的程式中我們只用了宣告變數 陣列和其他物件 objects 所必需的記憶體空間,這些記憶體空間的大小都在程式執行之前就已經確定了。但如果我們需要記憶體大小為乙個變數,其數值只有在程式執行時 runtime 才能確定,例如有些情況下我們需要根據使用者輸入來決定必需的記憶體空間,那麼我們...