{"id":60,"date":"2021-05-23T18:14:27","date_gmt":"2021-05-23T10:14:27","guid":{"rendered":"https:\/\/blog.cauchyschwarz.com\/?p=60"},"modified":"2021-05-23T20:55:48","modified_gmt":"2021-05-23T12:55:48","slug":"%e6%b7%b1%e5%85%a5%e5%ba%94%e7%94%a8c11%e7%ac%94%e8%ae%b0-%e7%ac%ac4%e7%ab%a0","status":"publish","type":"post","link":"https:\/\/blog.cauchyschwarz.com\/?p=60","title":{"rendered":"\u6df1\u5165\u5e94\u7528C++11\u7b14\u8bb0 \u7b2c4\u7ae0"},"content":{"rendered":"\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-right counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-69e0ad3582d36\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-69e0ad3582d36\" checked aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=60\/#%E4%BD%BF%E7%94%A8C11%E8%A7%A3%E5%86%B3%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F%E7%9A%84%E9%97%AE%E9%A2%98\" >\u4f7f\u7528C++11\u89e3\u51b3\u5185\u5b58\u6cc4\u6f0f\u7684\u95ee\u9898<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=60\/#shared_ptr\" >shared_ptr<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=60\/#1%E5%88%9D%E5%A7%8B%E5%8C%96\" >1.\u521d\u59cb\u5316<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=60\/#2%E8%8E%B7%E5%8F%96%E5%8E%9F%E5%A7%8B%E6%8C%87%E9%92%88\" >2.\u83b7\u53d6\u539f\u59cb\u6307\u9488<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=60\/#3%E6%8C%87%E5%AE%9A%E5%88%A0%E9%99%A4%E5%99%A8\" >3.\u6307\u5b9a\u5220\u9664\u5668<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=60\/#4%E4%BD%BF%E7%94%A8shared_ptr%E9%9C%80%E8%A6%81%E6%B3%A8%E6%84%8F%E7%9A%84%E5%9C%B0%E6%96%B9\" >4.\u4f7f\u7528shared_ptr\u9700\u8981\u6ce8\u610f\u7684\u5730\u65b9<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=60\/#unique_ptr\" >unique_ptr<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=60\/#weak_ptr\" >weak_ptr<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E4%BD%BF%E7%94%A8C11%E8%A7%A3%E5%86%B3%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F%E7%9A%84%E9%97%AE%E9%A2%98\"><\/span>\u4f7f\u7528C++11\u89e3\u51b3\u5185\u5b58\u6cc4\u6f0f\u7684\u95ee\u9898<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"shared_ptr\"><\/span>shared_ptr<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"1%E5%88%9D%E5%A7%8B%E5%8C%96\"><\/span>1.\u521d\u59cb\u5316<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>\u53ef\u4ee5\u901a\u8fc7\u6784\u9020\u51fd\u6570\u3001<code>std::make_shared&lt;T&gt;<\/code>\u548creset\u65b9\u6cd5\u6765\u521d\u59cb\u5316<code>shared_ptr<\/code>\u3002<\/p>\n\n\n\n<p>\u4f18\u5148\u4f7f\u7528<code>make_shared<\/code>\u6765\u6784\u9020<code>shared_ptr<\/code>\uff0c\u56e0\u4e3a\u5b83\u66f4\u52a0\u9ad8\u6548\u3002<\/p>\n\n\n\n<p>\u4e0d\u80fd\u5c06\u4e00\u4e2a\u539f\u59cb\u6307\u9488\u76f4\u63a5\u8d4b\u503c\u7ed9\u4e00\u4e2a<code>shared_ptr<\/code>\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::shared_ptr&lt;int&gt; p = new int(); \/\/\u9519\u8bef<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"2%E8%8E%B7%E5%8F%96%E5%8E%9F%E5%A7%8B%E6%8C%87%E9%92%88\"><\/span>2.\u83b7\u53d6\u539f\u59cb\u6307\u9488<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"3%E6%8C%87%E5%AE%9A%E5%88%A0%E9%99%A4%E5%99%A8\"><\/span>3.\u6307\u5b9a\u5220\u9664\u5668<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>void DeleteIntPtr(int* p)\n{\n  delete p;\n}\n\nstd::shared_ptr&lt;int&gt; p(new int, DeleteIntPtr);<\/code><\/pre>\n\n\n\n<p>\u5f53\u7528<code>shared_ptr<\/code>\u7ba1\u7406\u52a8\u6001\u6570\u7ec4\u65f6\uff0c\u9700\u8981\u6307\u5b9a\u5220\u9664\u5668\uff0c\u56e0\u4e3a<code>std::shared_ptr<\/code>\u7684\u9ed8\u8ba4\u5220\u9664\u5668\u4e0d\u652f\u6301\u6570\u7ec4\u5bf9\u8c61\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::shared_ptr&lt;int&gt; p(new int&#91;10], &#91;](int* p){detele&#91;] p;});<\/code><\/pre>\n\n\n\n<p>\u4e5f\u53ef\u4ee5\u5c06<code>std::default_detele<\/code>\u4f5c\u4e3a\u5220\u9664\u5668\u3002<code>default_delete<\/code>\u901a\u8fc7\u8c03\u7528<code>delete<\/code>\u6765\u5b9e\u73b0\u5220\u9664\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::shared_ptr&lt;int&gt; p(new int&#91;10], std::default_delete&lt;int&#91;]&gt;);<\/code><\/pre>\n\n\n\n<p>\u4e3a\u4ec0\u4e48<code>shared_ptr<\/code>\u9700\u8981\u663e\u793a\u6307\u5b9a\u6570\u7ec4\u7684\u5220\u9664\u5668\u5462\uff1f\u5927\u6982\u662f\u56e0\u4e3a<code>shared_ptr<\/code>\u7684\u6a21\u677f\u53c2\u6570\u7c7b\u578b\u662f\u4e00\u4e2a\u56fa\u5b9a\u7684<code>T<\/code>\uff0c<code>shared_ptr<\/code>\u7684\u6a21\u677f\u4ee3\u7801\u65e0\u6cd5\u533a\u5206<code>T*<\/code>\u6307\u5411\u7684\u662f\u5355\u4e2a\u5143\u7d20\u6307\u9488\u8fd8\u662f\u6570\u7ec4\u6307\u9488\u5427\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"4%E4%BD%BF%E7%94%A8shared_ptr%E9%9C%80%E8%A6%81%E6%B3%A8%E6%84%8F%E7%9A%84%E5%9C%B0%E6%96%B9\"><\/span>4.\u4f7f\u7528shared_ptr\u9700\u8981\u6ce8\u610f\u7684\u5730\u65b9<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li>\u4e0d\u8981\u7528\u4e00\u4e2a\u539f\u59cb\u6307\u9488\u53bb\u521d\u59cb\u5316\u591a\u4e2a<code>shared_ptr<\/code>\uff0c\u8fd9\u6837\u591a\u4e2a<code>shared_ptr<\/code>\u7ba1\u7406\u540c\u4e00\u4e2a\u8d44\u6e90\uff0c\u6790\u6784\u7684\u65f6\u5019\u4f1a\u591a\u6b21\u5220\u9664\u8fd9\u4e2a\u5bf9\u8c61\u3002<\/li><li>\u4e0d\u8981\u5728\u51fd\u6570\u5b9e\u53c2\u4e2d\u521b\u5efa<code>shared_ptr<\/code>\u3002<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>function(shared_ptr&lt;int>(new int), g());<\/code><\/pre>\n\n\n\n<p>\u50cf\u4e0a\u9762\u7684\u4ee3\u7801\uff0c\u4f1a\u5148\u6267\u884c<code>new int<\/code>\uff0c\u4f46\u662f<code>shared_ptr&lt;int>()<\/code>\u548c<code>g()<\/code>\u7684\u6267\u884c\u987a\u5e8f\u662f\u6ca1\u6709\u89c4\u5b9a\u7684\uff0c\u56e0\u6b64\u53ef\u80fd\u51fa\u73b0<code>g()<\/code>\u5148\u6267\u884c\uff0c\u4f46\u662f<code>g()<\/code>\u629b\u5f02\u5e38\uff0c\u7136\u540e<code>shared_ptr<\/code>\u672a\u521b\u5efa\u6210\u529f\uff0c<code>new int<\/code>\u7684\u5185\u5b58\u5c31\u6cc4\u6f0f\u4e86\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u901a\u8fc7<code>shared_from_this<\/code>\u8fd4\u56de<code>this<\/code>\u6307\u9488\u3002<\/li><\/ul>\n\n\n\n<p>\u5f53\u7c7bA\u88abshare_ptr\u7ba1\u7406\uff0c\u4e14\u5728\u7c7bA\u7684\u6210\u5458\u51fd\u6570\u91cc\u9700\u8981\u628a\u5f53\u524d\u7c7b\u5bf9\u8c61\u4f5c\u4e3a\u53c2\u6570\u4f20\u7ed9\u5176\u4ed6\u51fd\u6570\u65f6\uff0c\u5c31\u9700\u8981\u4f20\u9012\u4e00\u4e2a\u6307\u5411\u81ea\u8eab\u7684<code>share_ptr<\/code>\u3002<\/p>\n\n\n\n<p>\u6211\u4eec\u53ef\u80fd\u4f1a\u60f3\u7ed9\u7c7b\u6dfb\u52a0\u4e00\u4e2a\u4ece<code>this<\/code>\u6307\u9488\u751f\u6210<code>shared_ptr<\/code>\u7684\u6210\u5458\u51fd\u6570\uff0c\u4f46\u662f\u8fd9\u4f1a\u5bfc\u81f4\u4e00\u4e9b\u95ee\u9898\uff0c\u56e0\u4e3a\u6211\u4eec\u53ef\u80fd\u4f1a\u5728\u4ee3\u7801\u4e2d\u624b\u52a8\u521b\u5efa\u8be5\u7c7b\u5bf9\u8c61\u7684<code>shared_ptr<\/code>\uff0c\u7136\u540e\u53c8\u8c03\u7528\u8be5\u5bf9\u8c61\u7684\u751f\u6210<code>shared_ptr<\/code>\u7684\u6210\u5458\u51fd\u6570\uff0c\u8fd9\u6837\u8fd9\u4e2a\u5bf9\u8c61\u5c31\u6709\u4e86\u4e24\u4e2a<code>shared_ptr<\/code>\u5728\u7ba1\u7406\u5b83\uff0c\u5c31\u4f1a\u51fa\u95ee\u9898\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>struct A {\n  shared_tr&lt;A> GetSelf() {\n    return shared_ptr&lt;A>(this);\n  }\n};\n\nint main()\n{\n  shared_ptr&lt;A> sp1(new A);\n  shared_ptr&lt;A> sp2 = sp1->GetSelf(); \/\/ \u751f\u6210\u4e86\u4e24\u4e2ashared_ptr\u7ba1\u7406\u540c\u4e00\u4e2a\u5bf9\u8c61\n  return 0;\n}<\/code><\/pre>\n\n\n\n<p>\u6b63\u786e\u7684\u505a\u6cd5\u662f\u7ee7\u627f<code>std::enable_shared_from_this<\/code>\u6a21\u677f\u7c7b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class A: public std::enable_shared_from_this&lt;A>\n{\n  std::shared_ptr&lt;A> GetSelf() {\n    return shared_from_this();\n  }\n};\n\nstd:shared_ptr&lt;A> spy(new A);\nstd::shared_ptr&lt;A> p = spy->GetSelf();<\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/en.cppreference.com\/w\/cpp\/memory\/enable_shared_from_this\">https:\/\/en.cppreference.com\/w\/cpp\/memory\/enable_shared_from_this<\/a><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>A common implementation for\u00a0<code>enable_shared_from_this<\/code>\u00a0is to hold a weak reference (such as\u00a0<a href=\"https:\/\/en.cppreference.com\/w\/cpp\/memory\/weak_ptr\">std::weak_ptr<\/a>) to\u00a0this. The constructors of\u00a0<a href=\"https:\/\/en.cppreference.com\/w\/cpp\/memory\/shared_ptr\">std::shared_ptr<\/a>\u00a0detect the presence of an\u00a0unambiguous and accessible (ie. public inheritance is mandatory)\u00a0(since C++17)\u00a0<code>enable_shared_from_this<\/code>\u00a0base and assign the newly created\u00a0<a href=\"https:\/\/en.cppreference.com\/w\/cpp\/memory\/shared_ptr\">std::shared_ptr<\/a>\u00a0to the internally stored weak reference\u00a0if not already owned by a live\u00a0<a href=\"https:\/\/en.cppreference.com\/w\/cpp\/memory\/shared_ptr\">std::shared_ptr<\/a>\u00a0(since C++17). Constructing a\u00a0<a href=\"https:\/\/en.cppreference.com\/w\/cpp\/memory\/shared_ptr\">std::shared_ptr<\/a>\u00a0for an object that is already managed by another\u00a0<a href=\"https:\/\/en.cppreference.com\/w\/cpp\/memory\/shared_ptr\">std::shared_ptr<\/a>\u00a0will not consult the internally stored weak reference and thus will lead to undefined behavior.<\/p><p>It is permitted to call\u00a0<code>shared_from_this<\/code>\u00a0only on a previously shared object, i.e. on an object managed by\u00a0<a href=\"http:\/\/en.cppreference.com\/w\/cpp\/memory\/shared_ptr\">std::shared_ptr<\/a>&lt;T>. Otherwise\u00a0the behavior is undefined\u00a0(until C++17)<a href=\"https:\/\/en.cppreference.com\/w\/cpp\/memory\/bad_weak_ptr\">std::bad_weak_ptr<\/a>\u00a0is thrown (by the shared_ptr constructor from a default-constructed\u00a0<code>weak_this<\/code>)\u00a0(since C++17).<\/p><p><code>enable_shared_from_this<\/code>\u00a0provides the safe alternative to an expression like\u00a0<a href=\"http:\/\/en.cppreference.com\/w\/cpp\/memory\/shared_ptr\">std::shared_ptr<\/a>&lt;T>(this), which is likely to result in\u00a0this\u00a0being destructed more than once by multiple owners that are unaware of each other (see example below)<\/p><\/blockquote>\n\n\n\n<p>\u5982\u4e0a\u9762\u6240\u8ff0\uff0c<code>shared_from_this<\/code>\u8fd8\u53ea\u80fd\u88ab<code>shared_ptr&lt;T><\/code>\u8fd9\u6837\u7684\u667a\u80fd\u6307\u9488\u8c03\u7528\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u901a\u8fc7\u4f7f\u7528<code>weak_ptr<\/code>\u907f\u514d<code>shared_ptr<\/code>\u7684\u5faa\u73af\u5f15\u7528\u3002<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"unique_ptr\"><\/span>unique_ptr<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><code>unique_ptr<\/code>\u4e0d\u5141\u8bb8\u590d\u5236\uff0c\u4f46\u662f\u53ef\u4ee5\u901a\u8fc7\u51fd\u6570\u8fd4\u56de\u7ed9\u5176\u4ed6\u7684<code>unique_ptr<\/code>\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7<code>std::move<\/code>\u6765\u8f6c\u79fb\u5230\u5176\u4ed6\u7684<code>unique_ptr<\/code>\uff0c\u8fd9\u6837\u5b83\u672c\u8eab\u5c31\u4e0d\u518d\u62e5\u6709\u539f\u6765\u6307\u9488\u7684\u6240\u6709\u6743\u4e86\u3002<\/p>\n\n\n\n<p><code>unique_ptr<\/code>\u6307\u5b9a\u5220\u9664\u5668\u65f6\u4e0e<code>shared_ptr<\/code>\u4e0d\u4e00\u6837\uff0c\u9700\u8981\u6307\u5b9a\u5220\u9664\u5668\u7684\u7c7b\u578b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::unique_ptr&lt;int, void(*)(int *)> ptr(new int(1), &#91;](int *p){delete p;});<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"weak_ptr\"><\/span>weak_ptr<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>\u901a\u8fc7<code>use_count()<\/code>\u83b7\u53d6\u5f53\u524d\u89c2\u6d4b\u8d44\u6e90\u7684\u5f15\u7528\u8ba1\u6570<\/li><li>\u901a\u8fc7<code>expired()<\/code>\u65b9\u6cd5\u83b7\u53d6\u5f53\u524d\u89c2\u6d4b\u8d44\u6e90\u662f\u5426\u5df2\u7ecf\u88ab\u91ca\u653e<\/li><li>\u89e3\u51b3\u5faa\u73af\u5f15\u7528<\/li><li>\u901a\u8fc7<code>shared_from_this<\/code>\u8fd4\u56de<code>this<\/code>\u6307\u9488<\/li><\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4f7f\u7528C++11\u89e3\u51b3\u5185\u5b58\u6cc4\u6f0f\u7684\u95ee\u9898 shared_ptr 1.\u521d\u59cb\u5316 \u53ef\u4ee5\u901a\u8fc7\u6784\u9020\u51fd\u6570\u3001std::make_shared&lt;T&gt;\u548creset\u65b9\u6cd5\u6765\u521d\u59cb\u5316shared_ptr\u3002 \u4f18\u5148\u4f7f\u7528make&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[8,7,9],"class_list":["post-60","post","type-post","status-publish","format-standard","hentry","category-10","tag-c","tag-c11","tag-9"],"_links":{"self":[{"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/posts\/60","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=60"}],"version-history":[{"count":5,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/posts\/60\/revisions"}],"predecessor-version":[{"id":69,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/posts\/60\/revisions\/69"}],"wp:attachment":[{"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=60"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=60"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=60"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}