{"rsdb":{"rid":"244429","subhead":"","postdate":"0","aid":"168206","fid":"49","uid":"1","topic":"1","content":"
\n

13.1 \u62f7\u8d1d\u3001\u8d4b\u503c\u4e0e\u9500\u6bc1<\/h2> \n

13.1.1 \u62f7\u8d1d\u6784\u9020\u51fd\u6570<\/h3> \n

\u62f7\u8d1d\u6784\u9020\u51fd\u6570\u7684\u7b2c\u4e00\u4e2a\u53c2\u6570\u5fc5\u987b\u662f\u5f15\u7528\u7c7b\u578b\uff0c\u901a\u5e38\u8fd8\u662fconst\u7684\u5f15\u7528\u3002\u56e0\u4e3a\u5bf9\u4e8e\u51fd\u6570\u53c2\u6570\u4f20\u9012\u65f6\uff0c\u975e\u5f15\u7528\u7c7b\u578b\u7684\u53c2\u6570\u9700\u8981\u8fdb\u884c\u62f7\u8d1d\u521d\u59cb\u5316\uff0c\u800c\u5982\u679c\u62f7\u8d1d\u6784\u9020\u51fd\u6570\u7684\u53c2\u6570\u662f\u975e\u5f15\u7528\u7c7b\u578b\uff0c\u5c31\u4f1a\u9677\u5165\u6b7b\u5faa\u73af\u3002 \u9664\u4e86\u7b2c\u4e00\u4e2a\u53c2\u6570\uff0c\u5176\u4ed6\u53c2\u6570\u90fd\u8981\u6709\u9ed8\u8ba4\u5b9e\u53c2\u3002 \u5982\u679c\u6ca1\u6709\u5b9a\u4e49\u62f7\u8d1d\u6784\u9020\u51fd\u6570\uff0c\u7f16\u8bd1\u5668\u4f1a\u81ea\u52a8\u5408\u6210\u4e00\u4e2a\u3002 \u5408\u6210\u62f7\u8d1d\u6784\u9020\u51fd\u6570\uff1a\u4ece\u7ed9\u5b9a\u5bf9\u8c61\u4e2d\u4e00\u6b21\u5c06\u6bcf\u4e2a\u975estatic\u6210\u5458\u62f7\u8d1d\u5230\u5f53\u524d\u5bf9\u8c61\u3002 \u62f7\u8d1d\u521d\u59cb\u5316\u53d1\u751f\u60c5\u51b5\uff1a<\/p> \n

\u7528 = \u521d\u59cb\u5316\u5bf9\u8c61\u65f6\u3002 \u975e\u5f15\u7528\u53c2\u6570\u4f20\u9012\u3002 \u975e\u5f15\u7528\u51fd\u6570\u8fd4\u56de\u503c\u3002 \u5217\u8868\u521d\u59cb\u5316\u6570\u7ec4\u5143\u7d20\u6216\u8005\u805a\u5408\u7c7b\u7684\u6210\u5458\u3002<\/p> \n

\r\nstruct A\r\n{\r\n    int n, i;\r\n    A(int n = 1) : n(n) { }\r\n    A(const A& a, int i = 3) : n(a.n), i(i) { }         \/\/ \u7b2c\u4e00\u4e2a\u53c2\u6570\u5fc5\u987b\u4e3a\u5f15\u7528\uff0c\u5176\u4ed6\u53c2\u6570\u8981\u6709\u9ed8\u8ba4\u5b9e\u53c2\uff08\u9690\u5f0f\u8f6c\u6362\u65f6\u7684\u4f5c\u7528\uff09\r\n};\r\n\r\nvoid main()\r\n{\r\n    A a(2);         \/\/ \u76f4\u63a5\u521d\u59cb\u5316\r\n    A b(a);         \/\/ \u62f7\u8d1d\u521d\u59cb\u5316\r\n    \/\/A b = a;      \/\/ \u7b49\u4ef7\u4e0a\u9762\r\n    cout << b.n << "  " << b.i << endl;     \/\/ \u8f93\u51fa 2 3\r\n}\r\n<\/pre> \n 

13.1.2 \u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26<\/h3> \n

\u5982\u679c\u8fd0\u7b97\u7b26\u662f\u4e00\u4e2a\u6210\u5458\u51fd\u6570\uff0c\u5176\u5de6\u4fa7\u8fd0\u7b97\u5bf9\u8c61\u5c31\u7ed1\u5b9a\u5230\u9690\u5f0f\u7684this\u53c2\u6570\u3002 \u8d4b\u503c\u8fd0\u7b97\u7b26\u901a\u5e38\u5e94\u8be5\u8fd4\u56de\u4e00\u4e2a\u6307\u5411\u5176\u5de6\u4fa7\u8fd0\u7b97\u5bf9\u8c61\u7684\u5f15\u7528\u3002 \u5982\u679c\u672a\u5b9a\u4e49\u81ea\u5df1\u7684\u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26\uff0c\u7f16\u8bd1\u5668\u4f1a\u751f\u6210\u4e00\u4e2a\u5408\u6210\u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26<\/strong>\u3002<\/p> \n

13.1.3 \u6790\u6784\u51fd\u6570<\/h3> \n

\u7528\u4e8e\u91ca\u653e\u5bf9\u8c61\u4f7f\u7528\u7684\u8d44\u6e90\uff0c\u9500\u6bc1\u5bf9\u8c61\u7684\u975estatic\u6570\u636e\u6210\u5458\u3002 \u9690\u5f0f\u9500\u6bc1\u4e00\u4e2a\u5185\u7f6e\u6307\u9488\u7c7b\u578b\u7684\u6210\u5458\u4e0d\u4f1adelete\u4ed6\u6240\u6307\u5411\u7684\u5bf9\u8c61\u3002 \u667a\u80fd\u6307\u9488\u6210\u5458\u5728\u6790\u6784\u9636\u6bb5\u88ab\u81ea\u52a8\u9500\u6bc1\u3002 \u8c03\u7528\u6790\u6784\u51fd\u6570\u65f6\u95f4\uff08\u5bf9\u8c61\u88ab\u9500\u6bc1\uff09\uff1a<\/p> \n

\u53d8\u91cf\u79bb\u5f00\u4f5c\u7528\u57df\u3002 \u5bf9\u8c61\u88ab\u9500\u6bc1\uff0c\u6210\u5458\u4e5f\u8ddf\u7740\u9500\u6bc1\u3002 \u5bb9\u5668\u88ab\u9500\u6bc1\uff0c\u5143\u7d20\u4e5f\u88ab\u9500\u6bc1\u3002 \u52a8\u6001\u5206\u914d\u7684\u5bf9\u8c61\uff0c\u5f53\u5bf9\u6307\u5411\u5b83\u7684\u6307\u9488\u5e94\u7528delete\u3002 \u4e34\u65f6\u5bf9\u8c61\u5728\u521b\u5efa\u5b8c\u6574\u8868\u8fbe\u5f0f\u7ed3\u675f\u65f6\u3002 \u6307\u5411\u5bf9\u8c61\u7684\u5f15\u7528\u6216\u6307\u9488\u79bb\u5f00\u4f5c\u7528\u57df\u65f6\uff0c\u6790\u6784\u51fd\u6570\u4e0d\u4f1a\u6267\u884c\u3002<\/p> \n

13.1.4 \u4e09\/\u4e94\u6cd5\u5219<\/h3> \n

\u5982\u679c\u4e00\u4e2a\u7c7b\u9700\u8981\u6790\u6784\u51fd\u6570\uff0c\u53ef\u4ee5\u80af\u5b9a\u4e5f\u9700\u8981\u62f7\u8d1d\u6784\u9020\u51fd\u6570\u548c\u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26\uff08\u5982\uff1a\u6790\u6784\u8981\u9500\u6bc1\u6307\u9488\uff0c\u8bf4\u660e\u6bcf\u4e2a\u5bf9\u8c61\u6307\u9488\u90fd\u662f\u5c5e\u4e8e\u81ea\u5df1\u7684\uff0c\u90a3\u62f7\u8d1d\u7684\u65f6\u5019\u5c31\u4e0d\u80fd\u76f4\u63a5\u590d\u5236\u6307\u9488\uff0c\u8981\u65b0\u7684\u6307\u9488\uff09\u3002 \u5982\u679c\u4e00\u4e2a\u7c7b\u9700\u8981\u62f7\u8d1d\u8fd0\u7b97\u7b26\uff0c\u4e5f\u80af\u5b9a\u9700\u8981\u62f7\u8d1d\u6784\u9020\u51fd\u6570\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002\u4f46\u4e0d\u4e00\u5b9a\u9700\u8981\u6790\u6784\u51fd\u6570\uff08\u5982\uff1a\u62f7\u8d1d\u65f6\u9700\u8981\u6807\u660e\u6bcf\u4e2a\u5bf9\u8c61\u4e0d\u540c\u5e8f\u53f7\uff0c\u9700\u8981\u91cd\u65b0\u62f7\u8d1d\uff0c\u4f46\u548c\u6790\u6784\u65e0\u5173\uff09\u3002<\/p> \n

13.1.5 \u4f7f\u7528=default<\/h3> \n

\u7c7b\u4f3c\u6784\u9020\u51fd\u6570\uff0c=default\u53ef\u4ee5\u8981\u6c42\u7f16\u8bd1\u5668\u751f\u6210\u5408\u6210\u7248\u672c\u7684\u62f7\u8d1d\u63a7\u5236\u6210\u5458\u3002 \u9ed8\u8ba4\u662f\u9690\u5f0f\u5185\u8054\u7684\u3002\u5bf9\u6210\u5458\u7684\u7c7b\u5916\u5b9a\u4e49\u5c31\u4e0d\u662f\u5185\u8054\u7684\u3002<\/p> \n

13.1.5 \u963b\u6b62\u62f7\u8d1d<\/h3> \n

\u5b9a\u4e49\u5220\u9664\u7684\u51fd\u6570<\/strong>\u6765\u963b\u6b62\u62f7\u8d1d\u3002\u5728\u51fd\u6570\u53c2\u6570\u5217\u8868\u540e\u9762\u52a0\u4e0a =delete\u3002 \u4e0d\u540c\u4e8e=default\uff0c=delete\u5fc5\u987b\u51fa\u73b0\u5728\u51fd\u6570\u7b2c\u4e00\u6b21\u58f0\u660e\u7684\u65f6\u5019\u3002 \u53ef\u4ee5\u5bf9\u4efb\u4f55\u51fd\u6570\u6307\u5b9a=delete\u3002 \u6307\u5b9a\u4e86\u5220\u9664\u7684\u6790\u6784\u51fd\u6570\uff0c\u5c31\u65e0\u6cd5\u9500\u6bc1\u6b64\u7c7b\u578b\u7684\u5bf9\u8c61\uff0c\u4e5f\u4e0d\u80fd\u91ca\u653e\u5176\u53d8\u91cf\u548c\u52a8\u6001\u5206\u914d\u7684\u5bf9\u8c61\u7684\u6307\u9488\u3002 \u5f53\u4e0d\u53ef\u80fd\u62f7\u8d1d\u3001\u8d4b\u503c\u3001\u9500\u6bc1\u7c7b\u7684\u6210\u5458\u65f6\uff0c\u7c7b\u7684\u5408\u6210\u62f7\u8d1d\u63a7\u5236\u6210\u5458\u5c31\u88ab\u5b9a\u4e49\u4e3a\u5220\u9664\u7684\u3002 \u58f0\u660eprivate\u7684\u62f7\u8d1d\u6784\u9020\u51fd\u6570\u548c\u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26\u4e5f\u53ef\u4ee5\u963b\u6b62\u62f7\u8d1d\uff0c\u4f46\u4e0d\u5efa\u8bae\u3002<\/p> \n


\n

13.2 \u62f7\u8d1d\u63a7\u5236\u548c\u8d44\u6e90\u7ba1\u7406<\/h2> \n

13.2.1 \u884c\u4e3a\u50cf\u503c\u7684\u7c7b<\/h3> \u5bf9\u4e8e\u6307\u9488\u6210\u5458\uff0c\u5e94\u8be5\u662f\u521b\u5efa\u65b0\u7684\u6307\u9488\uff0c\u800c\u4e0d\u662f\u76f4\u63a5\u62f7\u8d1d\uff0c\u5426\u5219\u6307\u5411\u7684\u503c\u8fd8\u662f\u540c\u4e00\u4e2a\u3002 \u5982\u679c\u4e00\u4e2a\u5bf9\u8c61\u8d4b\u4e88\u5b83\u81ea\u8eab\uff0c\u8d4b\u503c\u8fd0\u7b97\u5fc5\u987b\u6b63\u786e\u3002 \u5927\u591a\u6570\u8d4b\u503c\u8fd0\u7b97\u7ec4\u5408\u4e86\u6790\u6784\u51fd\u6570\u548c\u62f7\u8d1d\u6784\u9020\u51fd\u6570\u7684\u5de5\u4f5c\u3002 \n
\r\nstruct Value\r\n{\r\n    int * p;\r\n    Value(int n = 0) :p(new int(n)) {}\r\n    Value(const Value &value) :p(new int(*value.p)) {}      \/\/ \u503c\u7c7b\u578b\u7684\u62f7\u8d1d\u6784\u9020\u51fd\u6570\uff1a\u6307\u9488\u8981\u91cd\u65b0\u5efa\r\n    Value& operator=(const Value &);\r\n    ~Value() { delete p; }\r\n};\r\n\r\nValue& Value::operator=(const Value &rv)\r\n{\r\n    \/\/ \u5148\u62f7\u8d1d\u503c\uff0c\u518d\u6e05\u9664\u539f\u6709\u503c\uff0c\u907f\u514d\u5904\u7406\u7684\u5bf9\u8c61\u662f\u672c\u8eab\u3002\u5982\u679c\u5148\u6e05\u9664\u540e\u62f7\u8d1d\uff0c\u5bf9\u4e8e\u5904\u7406\u672c\u8eab\u5bf9\u8c61\uff0c\u5c31\u4f1a\u51fa\u9519\r\n    auto newp = new int(*rv.p); \/\/ \u5148\u62f7\u8d1d\u4f20\u5165\u7684\u6307\u9488\u7684\u503c\uff0c\u6307\u9488\u9700\u8981\u91cd\u65b0\u521b\u5efa\r\n    delete p;                   \/\/ \u518d\u5220\u9664\u539f\u6709\u503c\u3002\r\n    p = newp;                   \/\/ \u6700\u540e\u518d\u8d4b\u503c\r\n    return *this;\r\n}\r\n\r\nvoid main()\r\n{\r\n    Value v1(3);    \/\/ \u6784\u9020\u51fd\u6570\r\n    Value v2(v1);   \/\/ \u62f7\u8d1d\u6784\u9020\u51fd\u6570\r\n    Value v3;\r\n    v3 = v1;        \/\/ \u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26\r\n\r\n    cout << *v1.p << "  " << *v2.p << "  " << *v3.p << endl;    \/\/ \u8f93\u51fa 3 3 3\r\n    v1 = v1;        \/\/ v1 \u8d4b\u503c\u7ed9\u81ea\u8eab\uff0c\u6b63\u786e\r\n    *v2.p = 123;    \/\/ \u4fee\u6539v2\u548cv3\u7684\u6307\u9488\u6307\u5411\u7684\u503c\r\n    *v3.p = 666;\r\n    cout << *v1.p << "  " << *v2.p << "  " << *v3.p << endl;    \/\/ \u8f93\u51fa 3 123 666\r\n}\r\n<\/pre> \n 

13.2.2 \u5b9a\u4e49\u884c\u4e3a\u50cf\u6307\u9488\u7684\u7c7b<\/h3> \u6a21\u4effshared_ptr\uff0c\u8bbe\u8ba1\u81ea\u5df1\u7684\u5f15\u7528\u8ba1\u6570\u3002\u8ba1\u6570\u5668\u4e3a\u6307\u9488\uff0c\u52a8\u6001\u5206\u914d\uff0c\u4ee5\u5171\u4eab\u3002\n
\u521b\u5efa\u4e00\u4e2a\u5bf9\u8c61\u65f6\uff08\u6784\u9020\u51fd\u6570\uff09\uff0c\u8ba1\u6570\u5668\u521d\u59cb\u5316\u4e3a1\u3002 \u62f7\u8d1d\u6784\u9020\u51fd\u6570\uff0c\u5171\u4eab\u8ba1\u6570\u5668\uff0c\u8ba1\u6570\u5668\u589e\u52a0\u3002 \u6790\u6784\u51fd\u6570\uff0c\u8ba1\u6570\u5668\u51cf\u5c0f\uff0c\u4e3a0\u65f6\u91ca\u653e\u5bf9\u8c61\u3002 \u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26\uff0c\u589e\u52a0\u53f3\u4fa7\u5bf9\u8c61\u7684\u8ba1\u6570\u5668\uff08\u7c7b\u4f3c\u62f7\u8d1d\u6784\u9020\u51fd\u6570\uff09\uff0c\u51cf\u5c0f\u5de6\u4fa7\u7684\u8ba1\u6570\u5668\uff08\u7c7b\u4f3c\u6790\u6784\u51fd\u6570\uff09\u3002 \n
\r\n\r\nclass Pointer\r\n{\r\npublic:\r\n    int *p;\r\n    Pointer(int n = 0) :p(new int(n)), count(new std::size_t(1)) {} \/\/ \u6784\u9020\u51fd\u6570\uff0c\u521d\u59cb\u5316\u8ba1\u6570\u5668\u4e3a1\r\n    Pointer(const Pointer &ptr) :p(ptr.p), count(ptr.count) { ++*count; }   \/\/ \u62f7\u8d1d\u6784\u9020\u51fd\u6570\uff0c\u6307\u9488\u76f4\u63a5\u590d\u5236\uff0c\u8ba1\u6570\u5668\u5171\u4eab\u4e14\u9012\u589e\r\n    Pointer& operator=(const Pointer&);\r\n    ~Pointer();\r\nprivate:\r\n    std::size_t *count;\r\n};\r\n\r\nPointer::~Pointer()\r\n{\r\n    if (--*count == 0)      \/\/ \u5f53\u6790\u6784\u6700\u540e\u4e00\u4e2a\u5bf9\u8c61\r\n    {\r\n        delete p;           \/\/ \u9500\u6bc1\u5171\u4eab\u6570\u636e\r\n        delete count;       \/\/ \u9500\u6bc1\u8ba1\u6570\u5668\r\n    }\r\n}\r\n\r\nPointer & Pointer::operator=(const Pointer & rp)\r\n{\r\n    ++*rp.count;                    \/\/ \u5148\u9012\u589e\u53f3\u503c\uff0c\u518d\u9012\u51cf\u5de6\u503c\u3002\u907f\u514d\u8d4b\u503c\u672c\u8eab\u65f6\u51fa\u9519\u3002\r\n    if (--*count == 0)      \/\/ \u9012\u51cf\u540c\u6790\u6784\u51fd\u6570\r\n    {\r\n        delete p;\r\n        delete count;\r\n    }\r\n    p = rp.p;               \/\/ \u6700\u540e\u518d\u590d\u5236\u6307\u9488\u548c\u8ba1\u6570\u5668\uff08\u90fd\u6307\u5411\u540c\u4e00\u4e2a\u503c\uff09\r\n    count = rp.count;\r\n    return *this;\r\n}\r\n\r\nvoid main()\r\n{\r\n    Pointer p1(8);  \/\/ \u6784\u9020\u51fd\u6570\r\n    Pointer p2(p1); \/\/ \u62f7\u8d1d\u6784\u9020\u51fd\u6570\r\n    Pointer p3;\r\n    p3 = p1;        \/","orderid":"0","title":"C++ \u62f7\u8d1d\u6784\u9020\u51fd\u6570\u3001\u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26\u3001\u79fb\u52a8\u6784\u9020\u51fd\u6570\u3001\u79fb\u52a8\u8d4b\u503c\u8fd0\u7b97\u7b26\u3001\u6790\u6784\u51fd\u6570\u3001\u53f3\u503c\u5f15\u7528\u3001\u5f15\u7528\u9650\u5b9a\u7b26\u5b9e\u4f8b(\u4e00)","smalltitle":"","mid":"0","fname":"c++\u7f16\u7a0b\u57fa\u7840","special_id":"0","bak_id":"0","info":"0","hits":"409","pages":"3","comments":"0","posttime":"2018-02-13 12:56:04","list":"1518497764","username":"admin","author":"","copyfrom":"","copyfromurl":"","titlecolor":"","fonttype":"0","titleicon":"0","picurl":"https:\/\/www.cppentry.com\/upload_files\/","ispic":"0","yz":"1","yzer":"","yztime":"0","levels":"0","levelstime":"0","keywords":"\u62f7\u8d1d<\/A> \u6784\u9020<\/A> \u51fd\u6570<\/A> \u8fd0\u7b97<\/A> \u79fb\u52a8<\/A> \u5f15\u7528<\/A> \u9650\u5b9a<\/A> \u5b9e\u4f8b<\/A>","jumpurl":"","iframeurl":"","style":"","template":"a:3:{s:4:\"head\";s:0:\"\";s:4:\"foot\";s:0:\"\";s:8:\"bencandy\";s:0:\"\";}","target":"0","ip":"113.87.122.142","lastfid":"0","money":"0","buyuser":"","passwd":"","allowdown":"","allowview":"","editer":"","edittime":"0","begintime":"0","endtime":"0","description":"C++ \u62f7\u8d1d\u6784\u9020\u51fd\u6570\u3001\u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26\u3001\u79fb\u52a8\u6784\u9020\u51fd\u6570\u3001\u79fb\u52a8\u8d4b\u503c\u8fd0\u7b97\u7b26\u3001\u6790\u6784\u51fd\u6570\u3001\u53f3\u503c\u5f15\u7528\u3001\u5f15\u7528\u9650\u5b9a\u7b26\u5b9e\u4f8b","lastview":"1711698491","digg_num":"2","digg_time":"1710482377","forbidcomment":"0","ifvote":"0","heart":"","htmlname":"","city_id":"0"},"page":"1"}