<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ##實戰c++中的string系列--不要使用memset初始化string(一定別這么干) 參考鏈接:? [http://www.cppblog.com/qinqing1984/archive/2009/08/07/92479.html](http://www.cppblog.com/qinqing1984/archive/2009/08/07/92479.html) 百度百科第一次這么給力:? void *memset(void *s, int ch, size_t n);? 函數解釋:將s中前n個字節 (typedef unsigned int size_t )用 ch 替換并返回 s 。? memset:作用是在一段內存塊中填充某個給定的值,它是對較大的結構體或數組進行清零操作的一種最快方法。 memset() 函數常用于內存空間初始化:? ~~~  char str[100];  memset(str,0,100); ~~~ 用來對一段內存空間全部設置為某個字符,一般用在對定義的字符串進行初始化為‘ ~~~ memset(a, '\0', sizeof(a)); ~~~ memcpy用來做內存拷貝,你可以拿它拷貝任何數據類型的對象,可以指定拷貝的數據長度:   ~~~ char a[100], b[50]; memcpy(b, a, sizeof(b)); //注意如用sizeof(a),會造成b的內存地址溢出。 ~~~ strcpy就只能拷貝字符串了,它遇到’\0’就結束拷貝:? ~~~ char a[100], b[50]; strcpy(a,b); ~~~ 如用strcpy(b,a),要注意a中的字符串長度(第一個‘\0’之前)是否超過50位,如超過,則會造成b的內存地址溢出。? 下面開始: ~~~ class Material { public: Material(){ setDefaults();} void setDefaults(){ memset(this,0,sizeof(*this));} int mark; char materialName[256]; // material name Vector3 ambient; // ambient Vector3 diffuse; // diffuse Vector3 specular; // specular int shininess; // float alpha; // bool isSpecular; char textureName[256]; // texture name char textureTransName[256]; // transparent texture name }; ~~~ 這段代碼完美無瑕。再看看下面的: ~~~ class Material { public: Material(){ setDefaults();} void setDefaults(){ memset(this,0,sizeof(*this));} int mark; std::string materialName; // material name Vector3 ambient; // ambient Vector3 diffuse; // diffuse Vector3 specular; // specular int shininess; // float alpha; // bool isSpecular; std::string textureName; // texture name std::string textureTransName; // transparent texture name }; ~~~ 上面的代碼會造成內存泄露:? 所以對于C++的std::string來說,要使用C++風格的初始化。 在網上看到這樣一條評論,覺得有道理:? **任何類都不能用memset, 一旦暴力,就等于你強奸了她的內部數據,她已經崩潰了**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看