{"id":2042,"date":"2025-03-24T08:48:29","date_gmt":"2025-03-23T23:48:29","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2042"},"modified":"2025-03-24T08:48:53","modified_gmt":"2025-03-23T23:48:53","slug":"c%e3%81%aenull%e3%82%92%e5%ae%8c%e5%85%a8%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc%ef%bc%81%e3%83%a2%e3%83%80%e3%83%b3%e3%81%aa%e5%ae%9f%e8%a3%85%e6%89%8b%e6%b3%95%e3%81%a8%e3%83%99%e3%82%b9%e3%83%88","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2042","title":{"rendered":"C++\u306enull\u3092\u5b8c\u5168\u30de\u30b9\u30bf\u30fc\uff01\u30e2\u30c0\u30f3\u306a\u5b9f\u88c5\u624b\u6cd5\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b97\u9078"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">C++\u306b\u304a\u3051\u308bnull\u306e\u57fa\u790e\u77e5\u8b58\u3068\u6b74\u53f2<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">C\u8a00\u8a9e\u304b\u3089\u7d99\u627f\u3055\u308c\u305fNULL\u306e\u8ad6\u70b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">C++11\u3067\u5c0e\u5165\u3055\u308c\u305fnullptr\u306e\u91cd\u8981\u6027<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">nullptr\u3092\u4f7f\u7528\u3059\u308b\u969b\u306e\u57fa\u672c\u7684\u306a\u30eb\u30fc\u30eb<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">\u30dd\u30a4\u30f3\u30bf\u306e\u521d\u671f\u5316\u306b\u304a\u3051\u308bnullptr\u306e\u4f7f\u7528\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-5\">\u6761\u4ef6\u5206\u5c90\u3067\u306enullptr\u30c1\u30a7\u30c3\u30af\u306e\u66f8\u304d\u65b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-6\">\u30e2\u30c0\u30f3C++\u3067null\u3092\u5b89\u5168\u306b\u6271\u3046\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-7\">\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u3092\u6d3b\u7528\u3057\u305fnull\u306e\u56de\u907f<\/a>      <\/li>      <li>        <a href=\"#i-8\">std::optional\u306b\u3088\u308bnull\u306e\u4ee3\u66ff\u8868\u73fe<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-9\">\u623b\u308a\u5024\u3067\u306enullptr\u3092\u6ce8\u76ee\u3059\u308b\u305f\u3081\u306e\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-10\">null\u306b\u3088\u308b\u4e00\u822c\u7684\u306a\u30d0\u30b0\u3068\u305d\u306e\u5bfe\u51e6\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-11\">\u30e1\u30e2\u30ea\u89e3\u653e\u5f8c\u306enullptr\u30c1\u30a7\u30c3\u30af\u6f0f\u308c<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-12\">\u30b9\u30ec\u30c3\u30c9\u30de\u30eb\u30c1\u74b0\u5883\u3067\u306enull\u30c1\u30a7\u30c3\u30af\u306e\u6ce8\u610f\u70b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-13\">\u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\u306enull\u5bfe\u7b56\u3068\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-14\">\u53e4\u3044NULL\u30de\u30af\u30ed\u306e\u4ee3\u66ff\u6226\u7565<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-15\">\u6bb5\u968e\u7684\u306anullptr\u5c0e\u5165\u306e\u30a2\u30d7\u30ed\u30fc\u30c1<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-16\">null\u5b89\u5168\u6027\u3092\u9ad8\u3081\u308b\u305f\u3081\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-17\">\u30c1\u30fc\u30e0\u958b\u767a\u306b\u304a\u3051\u308bnullptr\u4f7f\u7528\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-18\">\u9759\u7684\u89e3\u6790\u30c4\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u305fnull\u30c1\u30a7\u30c3\u30af<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-19\">\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b\u3067\u5b66\u3076null\u5b89\u5168<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-20\">null\u3092\u4f7f\u308f\u306a\u3044\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u4f8b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-21\">\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\u3067\u306enull\u5b89\u5168\u6027\u306e\u78ba\u4fdd<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">C++\u306b\u304a\u3051\u308bnull\u306e\u57fa\u790e\u77e5\u8b58\u3068\u6b74\u53f2<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">C\u8a00\u8a9e\u304b\u3089\u7d99\u627f\u3055\u308c\u305fNULL\u306e\u8ad6\u70b9<\/h3>\n\n\n\n<p>C++\u8a00\u8a9e\u306f\u3001\u305d\u306e\u524d\u8eab\u3067\u3042\u308bC\u8a00\u8a9e\u304b\u3089NULL\u306e\u6982\u5ff5\u3092\u7d99\u627f\u3057\u3066\u3044\u307e\u3059\u3002C\u8a00\u8a9e\u3067\u306f\u3001NULL\u306f\u901a\u5e38\u3001\u5358\u306a\u308b\u30de\u30af\u30ed\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u3066\u304a\u308a\u3001\u5b9f\u969b\u306b\u306f\u6574\u6570\u306e0\u3092\u8868\u73fe\u3057\u3066\u3044\u307e\u3057\u305f\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#define NULL 0  \/\/ \u53e4\u5178\u7684\u306aC\u8a00\u8a9e\u3067\u306eNULL\u306e\u5b9a\u7fa9<\/pre>\n\n\n\n<p>\u3053\u308c\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u554f\u984c\u304c\u767a\u751f\u3057\u3066\u3044\u307e\u3057\u305f\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u578b\u5b89\u5168\u6027\u306e\u6b20\u5982<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">void processPointer(int* ptr) { \/* ... *\/ }\nvoid processInteger(int value) { \/* ... *\/ }\n\n\/\/ \u4ee5\u4e0b\u306e\u547c\u3073\u51fa\u3057\u306f\u4e21\u65b9\u3068\u3082\u6709\u52b9\u3068\u306a\u3063\u3066\u3057\u307e\u3046\nprocessPointer(NULL);    \/\/ OK\nprocessInteger(NULL);    \/\/ \u3053\u308c\u3082\u610f\u56f3\u305b\u305aOK\u3068\u306a\u308b<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30aa\u30fc\u30d0\u30fc\u30ed\u30fc\u30c9\u89e3\u6c7a\u306e\u66d6\u6627\u3055<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">void handleValue(int* ptr) { \/* ... *\/ }\nvoid handleValue(long* ptr) { \/* ... *\/ }\n\n\/\/ NULL\u304c0\u3068\u3057\u3066\u89e3\u91c8\u3055\u308c\u308b\u305f\u3081\u3001\u3069\u3061\u3089\u306e\u30aa\u30fc\u30d0\u30fc\u30ed\u30fc\u30c9\u3092\u547c\u3076\u3079\u304d\u304b\u66d6\u6627\nhandleValue(NULL);  \/\/ \u30b3\u30f3\u30d1\u30a4\u30eb\u30a8\u30e9\u30fc<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">C++11\u3067\u5c0e\u5165\u3055\u308c\u305fnullptr\u306e\u91cd\u8981\u6027<\/h3>\n\n\n\n<p>C++11\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b<code>nullptr<\/code>\u30ad\u30fc\u30ef\u30fc\u30c9\u304c\u5c0e\u5165\u3055\u308c\u307e\u3057\u305f\u3002<code>nullptr<\/code>\u306f<code>std::nullptr_t<\/code>\u578b\u306e\u5b9a\u6570\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u7279\u5fb4\u3092\u6301\u3061\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u578b\u5b89\u5168\u6027\u306e\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">void processPointer(int* ptr) { \/* ... *\/ }\nvoid processInteger(int value) { \/* ... *\/ }\n\nprocessPointer(nullptr);    \/\/ OK\nprocessInteger(nullptr);    \/\/ \u30b3\u30f3\u30d1\u30a4\u30eb\u30a8\u30e9\u30fc - \u578b\u306e\u4e0d\u4e00\u81f4<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u660e\u78ba\u306a\u30aa\u30fc\u30d0\u30fc\u30ed\u30fc\u30c9\u89e3\u6c7a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">void handleValue(int* ptr) { \/* ... *\/ }\nvoid handleValue(long* ptr) { \/* ... *\/ }\n\nhandleValue(nullptr);  \/\/ \u4e21\u65b9\u306e\u30aa\u30fc\u30d0\u30fc\u30ed\u30fc\u30c9\u306b\u5bfe\u3057\u3066\u6709\u52b9<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3067\u306e\u6b63\u3057\u3044\u52d5\u4f5c<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">template&lt;typename T&gt;\nvoid templateFunction(T* ptr) {\n    \/\/ nullptr\u306f\u30dd\u30a4\u30f3\u30bf\u578b\u3068\u3057\u3066\u6b63\u3057\u304f\u63a8\u8ad6\u3055\u308c\u308b\n}\n\ntemplateFunction(nullptr);  \/\/ T \u306f\u81ea\u52d5\u7684\u306b\u63a8\u8ad6\u3055\u308c\u308b<\/pre>\n\n\n\n<p><code>nullptr<\/code>\u306e\u5c0e\u5165\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5229\u70b9\u304c\u5f97\u3089\u308c\u307e\u3057\u305f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30b3\u30fc\u30c9\u306e\u610f\u56f3\u304c\u660e\u78ba\u306b\u306a\u308b<\/strong>: \u30dd\u30a4\u30f3\u30bf\u304cnull\u3092\u793a\u3059\u3053\u3068\u304c\u660e\u793a\u7684<\/li>\n\n\n\n<li><strong>\u578b\u5b89\u5168\u6027\u306e\u5411\u4e0a<\/strong>: \u30dd\u30a4\u30f3\u30bf\u578b\u4ee5\u5916\u3078\u306e\u6697\u9ed9\u306e\u5909\u63db\u3092\u9632\u6b62<\/li>\n\n\n\n<li><strong>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30b3\u30fc\u30c9\u3067\u306e\u6b63\u3057\u3044\u52d5\u4f5c<\/strong>: \u578b\u63a8\u8ad6\u304c\u6b63\u78ba\u306b\u6a5f\u80fd<\/li>\n\n\n\n<li><strong>\u4fdd\u5b88\u6027\u306e\u5411\u4e0a<\/strong>: \u30b3\u30fc\u30c9\u306e\u610f\u56f3\u304c\u660e\u78ba\u306b\u306a\u308a\u3001\u30d0\u30b0\u306e\u767a\u898b\u304c\u5bb9\u6613\u306b<\/li>\n<\/ul>\n\n\n\n<p>\u307e\u305f\u3001C++17\u4ee5\u964d\u3067\u306f\u3001<code>nullptr<\/code>\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u5f37\u304f\u63a8\u5968\u3055\u308c\u3001\u5f93\u6765\u306e<code>NULL<\/code>\u30de\u30af\u30ed\u306e\u4f7f\u7528\u306f\u975e\u63a8\u5968\u3068\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30e2\u30c0\u30f3C++\u306b\u304a\u3051\u308b\u578b\u5b89\u5168\u6027\u3068\u8868\u73fe\u529b\u306e\u5411\u4e0a\u3092\u91cd\u8996\u3059\u308b\u65b9\u91dd\u306b\u6cbf\u3063\u305f\u3082\u306e\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u306e\u6b74\u53f2\u7684\u306a\u5909\u9077\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u306f\u3001\u30e2\u30c0\u30f3C++\u3067\u306enull\u306e\u9069\u5207\u306a\u6271\u3044\u65b9\u3092\u5b66\u3076\u4e0a\u3067\u91cd\u8981\u306a\u57fa\u790e\u3068\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001<code>nullptr<\/code>\u3092\u5b9f\u969b\u306b\u3069\u306e\u3088\u3046\u306b\u4f7f\u7528\u3059\u3079\u304d\u304b\u306b\u3064\u3044\u3066\u3001\u3088\u308a\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">nullptr\u3092\u4f7f\u7528\u3059\u308b\u969b\u306e\u57fa\u672c\u7684\u306a\u30eb\u30fc\u30eb<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">\u30dd\u30a4\u30f3\u30bf\u306e\u521d\u671f\u5316\u306b\u304a\u3051\u308bnullptr\u306e\u4f7f\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30dd\u30a4\u30f3\u30bf\u3092\u521d\u671f\u5316\u3059\u308b\u969b\u306f\u3001\u4ee5\u4e0b\u306e\u57fa\u672c\u30eb\u30fc\u30eb\u306b\u5f93\u3046\u3053\u3068\u3067\u3001\u591a\u304f\u306e\u554f\u984c\u3092\u672a\u7136\u306b\u9632\u3050\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u660e\u793a\u7684\u306a\u521d\u671f\u5316\u306e\u539f\u5247<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u63a8\u5968\u3055\u308c\u308b\u66f8\u304d\u65b9\nint* ptr = nullptr;  \/\/ \u660e\u793a\u7684\u306a\u521d\u671f\u5316\n\n\/\/ \u907f\u3051\u308b\u3079\u304d\u66f8\u304d\u65b9\nint* ptr;           \/\/ \u672a\u521d\u671f\u5316 - \u5371\u967a\nint* ptr = NULL;    \/\/ \u53e4\u3044\u66f8\u304d\u65b9 - \u975e\u63a8\u5968\nint* ptr = 0;       \/\/ \u6697\u9ed9\u7684\u306a\u5909\u63db - \u975e\u63a8\u5968<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30af\u30e9\u30b9\u30e1\u30f3\u30d0\u30fc\u30dd\u30a4\u30f3\u30bf\u306e\u521d\u671f\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class MyClass {\n    int* memberPtr;  \/\/ \u30e1\u30f3\u30d0\u30fc\u5909\u6570\npublic:\n    \/\/ \u63a8\u5968\uff1a\u521d\u671f\u5316\u5b50\u30ea\u30b9\u30c8\u3067nullptr\u3092\u4f7f\u7528\n    MyClass() : memberPtr(nullptr) {}\n\n    \/\/ \u975e\u63a8\u5968\uff1a\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u672c\u4f53\u3067\u306e\u521d\u671f\u5316\n    MyClass() { memberPtr = nullptr; }\n};<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u3068\u306e\u4f75\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u751f\u30dd\u30a4\u30f3\u30bf\u306e\u4ee3\u308f\u308a\u306b\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u3092\u4f7f\u7528\nstd::unique_ptr&lt;int&gt; smartPtr = nullptr;\nstd::shared_ptr&lt;int&gt; sharedPtr = nullptr;\n\n\/\/ \u30ea\u30bb\u30c3\u30c8\u6642\u306b\u3082nullptr\u3092\u4f7f\u7528\nsmartPtr.reset(nullptr);<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u6761\u4ef6\u5206\u5c90\u3067\u306enullptr\u30c1\u30a7\u30c3\u30af\u306e\u66f8\u304d\u65b9<\/h3>\n\n\n\n<p>nullptr\u306e\u30c1\u30a7\u30c3\u30af\u306f\u3001\u4ee5\u4e0b\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u5f93\u3063\u3066\u5b9f\u88c5\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u660e\u793a\u7684\u306a\u6bd4\u8f03<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">void processData(int* ptr) {\n    \/\/ \u63a8\u5968\u3055\u308c\u308b\u66f8\u304d\u65b9\n    if (ptr == nullptr) {\n        return;  \/\/ \u307e\u305f\u306f\u9069\u5207\u306a\u30a8\u30e9\u30fc\u51e6\u7406\n    }\n\n    \/\/ \u975e\u63a8\u5968\u306e\u66f8\u304d\u65b9\n    if (!ptr) { ... }        \/\/ \u6697\u9ed9\u7684\u306a\u5909\u63db\n    if (ptr == NULL) { ... } \/\/ \u53e4\u3044\u66f8\u304d\u65b9\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u65e9\u671f\u30ea\u30bf\u30fc\u30f3\u30d1\u30bf\u30fc\u30f3<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">bool processValue(int* ptr) {\n    \/\/ nullptr\u30c1\u30a7\u30c3\u30af\u3092\u6700\u521d\u306b\u884c\u3046\n    if (ptr == nullptr) {\n        return false;  \/\/ \u30a8\u30e9\u30fc\u72b6\u614b\u3092\u793a\u3059\n    }\n\n    \/\/ \u4ee5\u964d\u306e\u30b3\u30fc\u30c9\u3067\u306fnull\u30c1\u30a7\u30c3\u30af\u4e0d\u8981\n    doSomething(*ptr);\n    return true;\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u6761\u4ef6\u6f14\u7b97\u5b50\u3067\u306e\u4f7f\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u63a8\u5968\u3055\u308c\u308b\u66f8\u304d\u65b9\nint getValue(int* ptr) {\n    return (ptr == nullptr) ? 0 : *ptr;\n}\n\n\/\/ \u3088\u308a\u5b89\u5168\u306a\u4ee3\u66ff\u6848\uff1astd::optional\u306e\u4f7f\u7528\nstd::optional&lt;int&gt; getValue(int* ptr) {\n    return (ptr == nullptr) ? std::nullopt : std::optional&lt;int&gt;(*ptr);\n}<\/pre>\n\n\n\n<p>\u5b9f\u88c5\u6642\u306e\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e00\u8cab\u6027\u306e\u7dad\u6301<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u3067\u540c\u3058\u30c1\u30a7\u30c3\u30af\u30b9\u30bf\u30a4\u30eb\u3092\u4f7f\u7528<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u5185\u3067\u7d71\u4e00\u3055\u308c\u305f\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3092\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3078\u306e\u914d\u616e<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5927\u304d\u306a\u914d\u5217\u3084\u30eb\u30fc\u30d7\u3067\u306e\u52b9\u7387\u7684\u306a\u30c1\u30a7\u30c3\u30af\nvoid processArray(int* arr, size_t size) {\n    if (arr == nullptr) {\n        return;\n    }\n    \/\/ \u4e00\u5ea6\u306e\u30c1\u30a7\u30c3\u30af\u3067\u6e08\u3080\n    for (size_t i = 0; i &lt; size; ++i) {\n        \/\/ arr[i]\u306e\u51e6\u7406\n    }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c7\u30d0\u30c3\u30b0\u306e\u3057\u3084\u3059\u3055<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30a2\u30b5\u30fc\u30b7\u30e7\u30f3\u3092\u6d3b\u7528\u3057\u305f\u958b\u767a\u6642\u306e\u30c1\u30a7\u30c3\u30af\nvoid criticalOperation(int* ptr) {\n    assert(ptr != nullptr &amp;&amp; \"Pointer must not be null\");\n    \/\/ \u51e6\u7406\u306e\u7d9a\u884c\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30eb\u30fc\u30eb\u3092\u9069\u5207\u306b\u9069\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30fc\u30c9\u306e\u5b89\u5168\u6027\u3068\u4fdd\u5b88\u6027\u304c\u5927\u304d\u304f\u5411\u4e0a\u3057\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u57fa\u672c\u30eb\u30fc\u30eb\u3092\u8e0f\u307e\u3048\u305f\u4e0a\u3067\u3001\u3088\u308a\u9ad8\u5ea6\u306anull\u306e\u6271\u3044\u65b9\u306b\u3064\u3044\u3066\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-6\">\u30e2\u30c0\u30f3C++\u3067null\u3092\u5b89\u5168\u306b\u6271\u3046\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u3092\u6d3b\u7528\u3057\u305fnull\u306e\u56de\u907f<\/h3>\n\n\n\n<p>\u30e2\u30c0\u30f3C++\u3067\u306f\u3001\u751f\u30dd\u30a4\u30f3\u30bf\u306e\u4f7f\u7528\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u3001\u4ee3\u308f\u308a\u306b\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>std::unique_ptr\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u63a8\u5968\u3055\u308c\u308b\u5b9f\u88c5\nclass ResourceManager {\nprivate:\n    std::unique_ptr&lt;Resource&gt; resource;\n\npublic:\n    void initializeResource() {\n        resource = std::make_unique&lt;Resource&gt;();\n    }\n\n    \/\/ \u30ea\u30bd\u30fc\u30b9\u304c\u5b58\u5728\u3057\u306a\u3044\u53ef\u80fd\u6027\u3092\u660e\u793a\u7684\u306b\u793a\u3059\n    Resource* getResource() {\n        return resource.get();  \/\/ nullptr\u306e\u53ef\u80fd\u6027\u3042\u308a\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>std::shared_ptr\u306b\u3088\u308b\u5171\u6709\u6240\u6709\u6a29\u306e\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class SharedResource {\nprivate:\n    std::shared_ptr&lt;Resource&gt; resource;\n\npublic:\n    void shareResource(const std::shared_ptr&lt;Resource&gt;&amp; other) {\n        \/\/ \u53c2\u7167\u30ab\u30a6\u30f3\u30c8\u304c\u81ea\u52d5\u7684\u306b\u7ba1\u7406\u3055\u308c\u308b\n        resource = other;\n    }\n\n    bool hasResource() const {\n        return resource != nullptr;\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">std::optional\u306b\u3088\u308bnull\u306e\u4ee3\u66ff\u8868\u73fe<\/h3>\n\n\n\n<p>C++17\u3067\u5c0e\u5165\u3055\u308c\u305f<code>std::optional<\/code>\u306f\u3001\u5024\u304c\u5b58\u5728\u3057\u306a\u3044\u53ef\u80fd\u6027\u3092\u578b\u5b89\u5168\u306b\u8868\u73fe\u3059\u308b\u65b9\u6cd5\u3092\u63d0\u4f9b\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">std::optional&lt;int&gt; findValue(const std::vector&lt;int&gt;&amp; data, int key) {\n    auto it = std::find(data.begin(), data.end(), key);\n    if (it != data.end()) {\n        return *it;\n    }\n    return std::nullopt;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nvoid processOptionalValue() {\n    std::vector&lt;int&gt; numbers = {1, 2, 3, 4, 5};\n    auto result = findValue(numbers, 3);\n\n    if (result.has_value()) {\n        std::cout &lt;&lt; \"Found: \" &lt;&lt; *result &lt;&lt; \"\\n\";\n    } else {\n        std::cout &lt;&lt; \"Value not found\\n\";\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u5024\u306e\u5909\u63db\u3068\u7d44\u307f\u5408\u308f\u305b<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class User {\npublic:\n    std::optional&lt;std::string&gt; nickname;\n    std::string getDisplayName() const {\n        return nickname.value_or(\"Anonymous\");\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u623b\u308a\u5024\u3067\u306enullptr\u3092\u6ce8\u76ee\u3059\u308b\u305f\u3081\u306e\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Null Object\u30d1\u30bf\u30fc\u30f3<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\nclass Logger {\npublic:\n    virtual ~Logger() = default;\n    virtual void log(const std::string&amp; message) = 0;\n};\n\n\/\/ \u5b9f\u88c5\u30af\u30e9\u30b9\nclass FileLogger : public Logger {\npublic:\n    void log(const std::string&amp; message) override {\n        \/\/ \u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30ed\u30b0\u51fa\u529b\n    }\n};\n\n\/\/ Null\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u5b9f\u88c5\nclass NullLogger : public Logger {\npublic:\n    void log(const std::string&amp; message) override {\n        \/\/ \u4f55\u3082\u3057\u306a\u3044\n    }\n};\n\n\/\/ \u4f7f\u7528\u4f8b\nclass Application {\nprivate:\n    std::shared_ptr&lt;Logger&gt; logger;\n\npublic:\n    Application() : logger(std::make_shared&lt;NullLogger&gt;()) {}\n\n    void setLogger(std::shared_ptr&lt;Logger&gt; newLogger) {\n        logger = newLogger ? newLogger : std::make_shared&lt;NullLogger&gt;();\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Result\u578b\u30d1\u30bf\u30fc\u30f3<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">template&lt;typename T, typename E&gt;\nclass Result {\nprivate:\n    std::variant&lt;T, E&gt; data;\n\npublic:\n    explicit Result(const T&amp; value) : data(value) {}\n    explicit Result(const E&amp; error) : data(error) {}\n\n    bool isSuccess() const {\n        return std::holds_alternative&lt;T&gt;(data);\n    }\n\n    const T&amp; getValue() const {\n        return std::get&lt;T&gt;(data);\n    }\n\n    const E&amp; getError() const {\n        return std::get&lt;E&gt;(data);\n    }\n};\n\n\/\/ \u4f7f\u7528\u4f8b\nResult&lt;int, std::string&gt; divide(int a, int b) {\n    if (b == 0) {\n        return Result&lt;int, std::string&gt;(\"Division by zero\");\n    }\n    return Result&lt;int, std::string&gt;(a \/ b);\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30e2\u30c0\u30f3\u306a\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5229\u70b9\u304c\u5f97\u3089\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u578b\u5b89\u5168\u6027\u306e\u5411\u4e0a<\/strong>: \u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b\u591a\u304f\u306e\u30a8\u30e9\u30fc\u3092\u691c\u51fa\u53ef\u80fd<\/li>\n\n\n\n<li><strong>\u610f\u56f3\u306e\u660e\u78ba\u5316<\/strong>: API\u306e\u5951\u7d04\u304c\u578b\u30b7\u30b9\u30c6\u30e0\u3067\u8868\u73fe\u3055\u308c\u308b<\/li>\n\n\n\n<li><strong>\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u9632\u6b62<\/strong>: \u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u306e\u81ea\u52d5\u5316<\/li>\n\n\n\n<li><strong>\u4fdd\u5b88\u6027\u306e\u5411\u4e0a<\/strong>: \u30b3\u30fc\u30c9\u306e\u610f\u56f3\u304c\u660e\u78ba\u306b\u306a\u308a\u3001\u30d0\u30b0\u306e\u6df7\u5165\u3092\u9632\u3050<\/li>\n<\/ul>\n\n\n\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u9069\u7528\u3059\u308b\u969b\u306b\u6ce8\u610f\u3059\u3079\u304d\u4e00\u822c\u7684\u306a\u30d0\u30b0\u3068\u305d\u306e\u5bfe\u51e6\u6cd5\u306b\u3064\u3044\u3066\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-10\">null\u306b\u3088\u308b\u4e00\u822c\u7684\u306a\u30d0\u30b0\u3068\u305d\u306e\u5bfe\u51e6\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u30e1\u30e2\u30ea\u89e3\u653e\u5f8c\u306enullptr\u30c1\u30a7\u30c3\u30af\u6f0f\u308c<\/h3>\n\n\n\n<p>\u30e1\u30e2\u30ea\u89e3\u653e\u5f8c\u306e\u30dd\u30a4\u30f3\u30bf\uff08\u30c0\u30f3\u30b0\u30ea\u30f3\u30b0\u30dd\u30a4\u30f3\u30bf\uff09\u306b\u95a2\u9023\u3059\u308b\u554f\u984c\u306f\u3001\u6700\u3082\u4e00\u822c\u7684\u3067\u5371\u967a\u306a\u30d0\u30b0\u306e\u4e00\u3064\u3067\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5178\u578b\u7684\u306a\u554f\u984c\u30d1\u30bf\u30fc\u30f3<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ResourceHandler {\n    Resource* ptr;\npublic:\n    void cleanup() {\n        delete ptr;  \/\/ \u30e1\u30e2\u30ea\u3092\u89e3\u653e\n        \/\/ ptr\u306f\u307e\u3060\u30c0\u30f3\u30b0\u30ea\u30f3\u30b0\u30dd\u30a4\u30f3\u30bf\n    }\n\n    void use() {\n        if (ptr) {  \/\/ \u5371\u967a\uff1adelete\u3055\u308c\u305f\u30dd\u30a4\u30f3\u30bf\u306b\u30a2\u30af\u30bb\u30b9\n            ptr-&gt;doSomething();\n        }\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u5b89\u5168\u306a\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ResourceHandler {\n    Resource* ptr;\npublic:\n    void cleanup() {\n        delete ptr;\n        ptr = nullptr;  \/\/ nullptr\u3092\u8a2d\u5b9a\n    }\n\n    void use() {\n        if (ptr != nullptr) {\n            ptr-&gt;doSomething();\n        }\n    }\n\n    \/\/ \u3055\u3089\u306b\u826f\u3044\u5b9f\u88c5\uff1a\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u306e\u4f7f\u7528\n    std::unique_ptr&lt;Resource&gt; safePtr;\n};<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>RAII\u539f\u5247\u306e\u9069\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class SafeResourceHandler {\n    std::unique_ptr&lt;Resource&gt; ptr;  \/\/ RAII\u306b\u3088\u308b\u81ea\u52d5\u7ba1\u7406\npublic:\n    void use() {\n        if (ptr) {\n            ptr-&gt;doSomething();  \/\/ \u5b89\u5168\uff1a\u7121\u52b9\u306a\u30dd\u30a4\u30f3\u30bf\u306b\u306f\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\n        }\n    }\n};  \/\/ \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u81ea\u52d5\u7684\u306b\u89e3\u653e<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u30b9\u30ec\u30c3\u30c9\u30de\u30eb\u30c1\u74b0\u5883\u3067\u306enull\u30c1\u30a7\u30c3\u30af\u306e\u6ce8\u610f\u70b9<\/h3>\n\n\n\n<p>\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u74b0\u5883\u3067\u306f\u3001null\u30c1\u30a7\u30c3\u30af\u306b\u95a2\u9023\u3059\u308b\u554f\u984c\u304c\u3088\u308a\u8907\u96d1\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5178\u578b\u7684\u306a\u7af6\u5408\u72b6\u614b<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5371\u967a\u306a\u5b9f\u88c5\nclass SharedResource {\n    Resource* ptr;\npublic:\n    void process() {\n        if (ptr != nullptr) {  \/\/ \u30c1\u30a7\u30c3\u30af\n            \/\/ \u3053\u306e\u6642\u70b9\u3067\u4ed6\u30b9\u30ec\u30c3\u30c9\u304cptr\u3092\u524a\u9664\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\n            ptr-&gt;doSomething();  \/\/ \u5371\u967a\u306a\u64cd\u4f5c\n        }\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30df\u30e5\u30fc\u30c6\u30c3\u30af\u30b9\u306b\u3088\u308b\u4fdd\u8b77<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ThreadSafeResource {\n    std::mutex mtx;\n    Resource* ptr;\npublic:\n    void process() {\n        std::lock_guard&lt;std::mutex&gt; lock(mtx);\n        if (ptr != nullptr) {\n            ptr-&gt;doSomething();  \/\/ \u5b89\u5168\uff1a\u30df\u30e5\u30fc\u30c6\u30c3\u30af\u30b9\u3067\u4fdd\u8b77\n        }\n    }\n};<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30a2\u30c8\u30df\u30c3\u30af\u64cd\u4f5c\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class AtomicResource {\n    std::atomic&lt;Resource*&gt; ptr;\npublic:\n    void process() {\n        Resource* current = ptr.load(std::memory_order_acquire);\n        if (current != nullptr) {\n            current-&gt;doSomething();\n        }\n    }\n\n    void update(Resource* newPtr) {\n        Resource* oldPtr = ptr.exchange(newPtr, std::memory_order_acq_rel);\n        delete oldPtr;  \/\/ \u53e4\u3044\u30ea\u30bd\u30fc\u30b9\u3092\u5b89\u5168\u306b\u89e3\u653e\n    }\n};<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u30b9\u30ec\u30c3\u30c9\u30bb\u30fc\u30d5\u306a\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u306e\u4f7f\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ModernThreadSafeResource {\n    std::shared_ptr&lt;Resource&gt; ptr;  \/\/ \u30b9\u30ec\u30c3\u30c9\u30bb\u30fc\u30d5\u306a\u53c2\u7167\u30ab\u30a6\u30f3\u30c8\n    mutable std::shared_mutex mtx;  \/\/ \u8aad\u307f\u66f8\u304d\u30ed\u30c3\u30af\n\npublic:\n    void read() const {\n        std::shared_lock lock(mtx);  \/\/ \u8aad\u307f\u53d6\u308a\u7528\u30ed\u30c3\u30af\n        if (auto p = ptr) {  \/\/ \u30b3\u30d4\u30fc\u3092\u53d6\u5f97\n            p-&gt;read();  \/\/ \u5b89\u5168\u306a\u8aad\u307f\u53d6\u308a\u64cd\u4f5c\n        }\n    }\n\n    void write() {\n        std::unique_lock lock(mtx);  \/\/ \u66f8\u304d\u8fbc\u307f\u7528\u30ed\u30c3\u30af\n        if (ptr) {\n            ptr-&gt;write();\n        }\n    }\n};<\/pre>\n\n\n\n<p>\u30d0\u30b0\u9632\u6b62\u306e\u305f\u3081\u306e\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30d0\u30c3\u30b0\u652f\u63f4\u30c4\u30fc\u30eb\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">void debugExample() {\n    #ifndef NDEBUG\n    Resource* ptr = nullptr;\n    assert(ptr == nullptr &amp;&amp; \"Pointer should be null\");\n    #endif\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u9759\u7684\u89e3\u6790\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u9759\u7684\u89e3\u6790\u30c4\u30fc\u30eb\u304c\u691c\u51fa\u53ef\u80fd\u306a\u554f\u984c\u30d1\u30bf\u30fc\u30f3\nvoid problematicCode() {\n    int* ptr = new int(42);\n    if (ptr == nullptr) {\n        delete ptr;  \/\/ \u9759\u7684\u89e3\u6790: nullptr\u306e\u524a\u9664\u3092\u691c\u51fa\n    }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u30ed\u30b0\u306e\u5145\u5b9f\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">void loggedOperation(Resource* ptr) {\n    if (ptr == nullptr) {\n        logger.error(\"Null pointer detected in loggedOperation\");\n        return;\n    }\n    \/\/ \u51e6\u7406\u306e\u7d9a\u884c\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5bfe\u7b56\u3092\u9069\u5207\u306b\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001null\u30dd\u30a4\u30f3\u30bf\u306b\u95a2\u9023\u3059\u308b\u591a\u304f\u306e\u554f\u984c\u3092\u9632\u3050\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u65e2\u5b58\u306e\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3067\u3053\u308c\u3089\u306e\u5bfe\u7b56\u3092\u6bb5\u968e\u7684\u306b\u5c0e\u5165\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-13\">\u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\u306enull\u5bfe\u7b56\u3068\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u53e4\u3044NULL\u30de\u30af\u30ed\u306e\u4ee3\u66ff\u6226\u7565<\/h3>\n\n\n\n<p>\u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3067\u306eNULL\u30de\u30af\u30ed\u306e\u7f6e\u304d\u63db\u3048\u306f\u3001\u614e\u91cd\u306b\u8a08\u753b\u3057\u3066\u5b9f\u65bd\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6bb5\u968e\u7684\u306a\u7f6e\u304d\u63db\u3048\u6226\u7565<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u65e2\u5b58\u306e\u30b3\u30fc\u30c9\n#define MY_NULL 0  \/\/ \u30ec\u30ac\u30b7\u30fc\u306a\u5b9a\u7fa9\n\n\/\/ \u79fb\u884c\u671f\u306e\u4e92\u63db\u5c64\n#if __cplusplus &gt;= 201103L\n    #define SAFE_NULL nullptr\n#else\n    #define SAFE_NULL NULL\n#endif\n\n\/\/ \u6bb5\u968e\u7684\u306a\u7f6e\u304d\u63db\u3048\u306e\u4f8b\nclass LegacyClass {\n    int* oldPtr = MY_NULL;     \/\/ \u53e4\u3044\u5b9f\u88c5\n    int* transitionalPtr = SAFE_NULL;  \/\/ \u79fb\u884c\u671f\u306e\u5b9f\u88c5\n    int* modernPtr = nullptr;  \/\/ \u6700\u7d42\u7684\u306a\u5b9f\u88c5\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30b3\u30f3\u30d1\u30a4\u30e9\u8b66\u544a\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#ifdef __GNUC__\n    #pragma GCC warning \"Deprecated: Use nullptr instead of NULL\"\n#endif\n\nvoid legacyFunction(int* ptr = NULL) {  \/\/ \u8b66\u544a\u304c\u767a\u751f\n    \/\/ ...\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u6bb5\u968e\u7684\u306anullptr\u5c0e\u5165\u306e\u30a2\u30d7\u30ed\u30fc\u30c1<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u65e2\u5b58\u30b3\u30fc\u30c9\u306e\u5206\u6790\u3068\u512a\u5148\u9806\u4f4d\u4ed8\u3051<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u512a\u5148\u5ea6\u306e\u9ad8\u3044\u4fee\u6b63\u5bfe\u8c61\nclass CriticalSystem {\n    void* dangerousPtr;  \/\/ NULL\u4f7f\u7528\u7b87\u6240\u3092\u7279\u5b9a\npublic:\n    \/\/ \u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u5019\u88dc\u306e\u30e1\u30bd\u30c3\u30c9\n    bool initialize() {\n        if (dangerousPtr == NULL) {  \/\/ \u8981\u4fee\u6b63\n            dangerousPtr = malloc(sizeof(int));\n            return dangerousPtr != NULL;  \/\/ \u8981\u4fee\u6b63\n        }\n        return false;\n    }\n};\n\n\/\/ \u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u5f8c\nclass ModernizedSystem {\n    std::unique_ptr&lt;void&gt; safePtr;\npublic:\n    bool initialize() {\n        if (!safePtr) {\n            safePtr = std::make_unique&lt;int&gt;();\n            return safePtr != nullptr;\n        }\n        return false;\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8\u306e\u78ba\u4fdd<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c6\u30b9\u30c8\u7528\u306e\u30e9\u30c3\u30d1\u30fc\u30af\u30e9\u30b9\nclass TestableWrapper {\n    OldClass* legacy;\npublic:\n    \/\/ nullptr\u3092\u4f7f\u7528\u3059\u308b\u65b0\u3057\u3044\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\n    bool isValid() const {\n        \/\/ \u53e4\u3044NULL\u30c1\u30a7\u30c3\u30af\u3092\u30e9\u30c3\u30d7\n        return legacy != nullptr;\n    }\n\n    \/\/ \u30c6\u30b9\u30c8\u7528\u306e\u30e1\u30bd\u30c3\u30c9\n    static void runTests() {\n        TestableWrapper wrapper;\n        assert(wrapper.isValid() == false);\n        wrapper.legacy = new OldClass();\n        assert(wrapper.isValid() == true);\n    }\n};<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u79fb\u884c\u652f\u63f4\u30c4\u30fc\u30eb\u306e\u4f5c\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30ab\u30b9\u30bf\u30e0\u30a2\u30b5\u30fc\u30c8\u95a2\u6570\ninline void checkNotNull(const void* ptr, const char* message) {\n    if (ptr == nullptr) {\n        throw std::runtime_error(message);\n    }\n}\n\n\/\/ \u79fb\u884c\u671f\u306e\u88dc\u52a9\u95a2\u6570\ntemplate&lt;typename T&gt;\nT* safeCast(void* ptr) {\n    checkNotNull(ptr, \"Null pointer in safeCast\");\n    return static_cast&lt;T*&gt;(ptr);\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nclass MigrationHelper {\n    void* oldStylePtr;\npublic:\n    template&lt;typename T&gt;\n    T* getModernPointer() {\n        return safeCast&lt;T&gt;(oldStylePtr);\n    }\n};<\/pre>\n\n\n\n<p>\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u306e\u4e3b\u8981\u306a\u30b9\u30c6\u30c3\u30d7\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u306e\u5206\u6790<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u554f\u984c\u306e\u3042\u308b\u7b87\u6240\u3092\u7279\u5b9a\nclass LegacyComponent {\n    int* ptr1 = 0;      \/\/ \u8981\u4fee\u6b63: \u6574\u6570\u30ea\u30c6\u30e9\u30eb\n    int* ptr2 = NULL;   \/\/ \u8981\u4fee\u6b63: NULL\u30de\u30af\u30ed\n    int* ptr3;          \/\/ \u8981\u4fee\u6b63: \u672a\u521d\u671f\u5316\n\n    void riskyMethod() {\n        if (!ptr1) {}   \/\/ \u8981\u4fee\u6b63: \u6697\u9ed9\u7684\u5909\u63db\n        if (ptr2 == 0) {} \/\/ \u8981\u4fee\u6b63: \u6574\u6570\u6bd4\u8f03\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u5b89\u5168\u306a\u79fb\u884c\u30d1\u30bf\u30fc\u30f3\u306e\u9069\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u79fb\u884c\u7528\u306e\u5b89\u5168\u306a\u30e9\u30c3\u30d1\u30fc\ntemplate&lt;typename T&gt;\nclass SafePointerWrapper {\n    T* ptr;\npublic:\n    SafePointerWrapper() : ptr(nullptr) {}\n\n    bool isNull() const {\n        return ptr == nullptr;\n    }\n\n    T* get() const {\n        return ptr;\n    }\n\n    void reset(T* newPtr = nullptr) {\n        delete ptr;\n        ptr = newPtr;\n    }\n};\n\n\/\/ \u4f7f\u7528\u4f8b\nclass ModernizedComponent {\n    SafePointerWrapper&lt;int&gt; safePtr;\n\n    void safeMethod() {\n        if (safePtr.isNull()) {\n            \/\/ \u5b89\u5168\u306a\u51e6\u7406\n        }\n    }\n};<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u3068\u30c6\u30b9\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u524d\u5f8c\u306e\u52d5\u4f5c\u78ba\u8a8d\nvoid verifyRefactoring() {\n    \/\/ \u53e4\u3044\u5b9f\u88c5\n    LegacyComponent* old = NULL;\n    assert(old == NULL);\n\n    \/\/ \u65b0\u3057\u3044\u5b9f\u88c5\n    ModernizedComponent* modern = nullptr;\n    assert(modern == nullptr);\n\n    \/\/ \u4e21\u8005\u306e\u52d5\u4f5c\u304c\u540c\u3058\u3053\u3068\u3092\u78ba\u8a8d\n    bool oldCheck = (old == NULL);\n    bool modernCheck = (modern == nullptr);\n    assert(oldCheck == modernCheck);\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306a\u6bb5\u968e\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u3088\u308a\u3001\u65e2\u5b58\u306e\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3092\u5b89\u5168\u306b\u73fe\u4ee3\u7684\u306a\u5b9f\u88c5\u3078\u3068\u79fb\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u306e\u3088\u3046\u306a\u6539\u5584\u3092\u7d99\u7d9a\u7684\u306b\u884c\u3046\u305f\u3081\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u306b\u3064\u3044\u3066\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-16\">null\u5b89\u5168\u6027\u3092\u9ad8\u3081\u308b\u305f\u3081\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u30c1\u30fc\u30e0\u958b\u767a\u306b\u304a\u3051\u308bnullptr\u4f7f\u7528\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3<\/h3>\n\n\n\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306enullptr\u4f7f\u7528\u306b\u95a2\u3059\u308b\u4e00\u8cab\u3057\u305f\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u78ba\u7acb\u3059\u308b\u305f\u3081\u306b\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3092\u63a8\u5968\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u7684\u306a\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u898f\u7d04<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5fc5\u9808\u898f\u5247\uff1a\n\/\/ 1. \u5168\u3066\u306e\u30dd\u30a4\u30f3\u30bf\u3092 nullptr \u3067\u521d\u671f\u5316\nclass Component {\nprivate:\n    Resource* resource = nullptr;  \/\/ \u826f\u3044\n    Handler* handler{nullptr};     \/\/ \u3053\u308c\u3082\u53ef\n};\n\n\/\/ 2. \u751f\u30dd\u30a4\u30f3\u30bf\u306e\u4ee3\u308f\u308a\u306b\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u3092\u512a\u5148\nclass ModernComponent {\nprivate:\n    std::unique_ptr&lt;Resource&gt; resource;  \/\/ \u63a8\u5968\n    std::shared_ptr&lt;Handler&gt; handler;    \/\/ \u6240\u6709\u6a29\u5171\u6709\u304c\u5fc5\u8981\u306a\u5834\u5408\n};\n\n\/\/ 3. \u95a2\u6570\u306e\u5f15\u6570\u3067\u306enullptr\u5bfe\u5fdc\u3092\u660e\u793a\nvoid processResource(const Resource* resource) {\n    \/\/ nullptr \u30c1\u30a7\u30c3\u30af\u304c\u5fc5\u8981\u306a\u3053\u3068\u3092\u793a\u3059\u30b3\u30e1\u30f3\u30c8\n    if (resource == nullptr) {\n        throw std::invalid_argument(\"Resource cannot be null\");\n    }\n    \/\/ \u51e6\u7406\u306e\u7d9a\u884c\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30ec\u30d3\u30e5\u30fc\u6642\u306e\u78ba\u8a8d\u9805\u76ee\nclass ReviewExample {\n    \/\/ \u2713 \u30dd\u30a4\u30f3\u30bf\u306e\u521d\u671f\u5316\n    Data* data = nullptr;  \/\/ OK\n\n    \/\/ \u2713 RAII\u539f\u5247\u306e\u9069\u7528\n    std::unique_ptr&lt;Cache&gt; cache = std::make_unique&lt;Cache&gt;();\n\n    \/\/ \u2713 null\u8a31\u5bb9\u6027\u306e\u660e\u793a\n    void process(const Data* nullable_data) {  \/\/ \u547d\u540d\u3067\u793a\u5506\n        if (nullable_data) {\n            \/\/ \u51e6\u7406\n        }\n    }\n\n    \/\/ \u2713 \u4f8b\u5916\u5b89\u5168\u6027\u306e\u78ba\u4fdd\n    std::shared_ptr&lt;Resource&gt; createResource() {\n        return std::make_shared&lt;Resource&gt;();  \/\/ \u4f8b\u5916\u5b89\u5168\n    }\n};<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u898f\u7d04<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u95a2\u6570\u306enull\u8a31\u5bb9\u6027\u3092\u660e\u793a\u7684\u306b\u6587\u66f8\u5316\n\/**\n * @brief \u30ea\u30bd\u30fc\u30b9\u3092\u51e6\u7406\u3059\u308b\n * @param resource \u51e6\u7406\u5bfe\u8c61\u306e\u30ea\u30bd\u30fc\u30b9\uff08nullptr\u4e0d\u53ef\uff09\n * @throws std::invalid_argument resource\u304cnullptr\u306e\u5834\u5408\n *\/\nvoid processResource(Resource* resource);\n\n\/**\n * @brief \u30aa\u30d7\u30b7\u30e7\u30ca\u30eb\u306a\u51e6\u7406\u3092\u5b9f\u884c\n * @param data \u51e6\u7406\u5bfe\u8c61\u306e\u30c7\u30fc\u30bf\uff08nullptr\u306e\u5834\u5408\u306f\u51e6\u7406\u3092\u30b9\u30ad\u30c3\u30d7\uff09\n *\/\nvoid processOptionalData(const Data* data);<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u9759\u7684\u89e3\u6790\u30c4\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u305fnull\u30c1\u30a7\u30c3\u30af<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9759\u7684\u89e3\u6790\u30c4\u30fc\u30eb\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Clang-Tily\u306e\u8a2d\u5b9a\u4f8b\n\/\/ .clang-tidy\nChecks: 'modernize-*,\n         performance-*,\n         bugprone-*,\n         cppcoreguidelines-*'\n\n\/\/ null\u30dd\u30a4\u30f3\u30bf\u95a2\u9023\u306e\u8b66\u544a\u3092\u6709\u52b9\u5316\nCheckOptions:\n  - key: modernize-use-nullptr.NullMacros\n    value: 'NULL,nullptr'<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u89e3\u6790\u30eb\u30fc\u30eb\u306e\u6d3b\u7528\u4f8b<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u9759\u7684\u89e3\u6790\u3067\u691c\u51fa\u3055\u308c\u308b\u554f\u984c\u30d1\u30bf\u30fc\u30f3\nclass ProblematicCode {\n    int* ptr;  \/\/ \u8b66\u544a: \u672a\u521d\u671f\u5316\u30dd\u30a4\u30f3\u30bf\n\n    void method() {\n        if (ptr == NULL) {  \/\/ \u8b66\u544a: NULL\u306e\u4f7f\u7528\n            ptr = 0;        \/\/ \u8b66\u544a: 0\u30ea\u30c6\u30e9\u30eb\u306e\u4f7f\u7528\n        }\n\n        if (!ptr) {  \/\/ \u8b66\u544a: \u6697\u9ed9\u7684\u306a\u30d6\u30fc\u30eb\u5909\u63db\n            \/\/ ...\n        }\n    }\n};\n\n\/\/ \u63a8\u5968\u3055\u308c\u308b\u5b9f\u88c5\nclass ImprovedCode {\n    int* ptr = nullptr;  \/\/ OK\n\n    void method() {\n        if (ptr == nullptr) {  \/\/ OK\n            ptr = nullptr;     \/\/ OK\n        }\n\n        if (ptr == nullptr) {  \/\/ OK: \u660e\u793a\u7684\u306a\u6bd4\u8f03\n            \/\/ ...\n        }\n    }\n};<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u7d99\u7d9a\u7684\u30a4\u30f3\u30c6\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># .gitlab-ci.yml \u306e\u4f8b\nstatic_analysis:\n  script:\n    - run-clang-tidy -checks='-*,modernize-use-nullptr'\n    - cppcheck --enable=all --suppress=nullPointerRedundantCheck\n\n# \u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u306e\u81ea\u52d5\u30c1\u30a7\u30c3\u30af\npull_request:\n  script:\n    - analyze-null-safety\n    - check-nullptr-usage<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30e0\u89e3\u6790\u30eb\u30fc\u30eb\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30ab\u30b9\u30bf\u30e0\u306e\u9759\u7684\u89e3\u6790\u30c1\u30a7\u30c3\u30ab\u30fc\nclass NullSafetyChecker {\npublic:\n    \/\/ nullptr\u4f7f\u7528\u306e\u4e00\u8cab\u6027\u3092\u30c1\u30a7\u30c3\u30af\n    void checkNullptrUsage(const FunctionDecl* func) {\n        \/\/ \u5f15\u6570\u306enull\u8a31\u5bb9\u6027\u3092\u30c1\u30a7\u30c3\u30af\n        for (const auto* param : func-&gt;parameters()) {\n            checkParameterNullability(param);\n        }\n\n        \/\/ \u623b\u308a\u5024\u306enull\u8a31\u5bb9\u6027\u3092\u30c1\u30a7\u30c3\u30af\n        checkReturnValueNullability(func);\n    }\n\n    \/\/ \u30dd\u30a4\u30f3\u30bf\u30e1\u30f3\u30d0\u306e\u521d\u671f\u5316\u3092\u30c1\u30a7\u30c3\u30af\n    void checkMemberInitialization(const CXXRecordDecl* record) {\n        for (const auto* field : record-&gt;fields()) {\n            if (field-&gt;getType()-&gt;isPointerType()) {\n                checkFieldInitialization(field);\n            }\n        }\n    }\n};<\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li><strong>\u30b3\u30fc\u30c9\u306e\u54c1\u8cea\u30e1\u30c8\u30ea\u30af\u30b9<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30e1\u30c8\u30ea\u30af\u30b9\u53ce\u96c6\u7528\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\nclass NullSafetyMetrics {\npublic:\n    \/\/ nullptr\u306e\u4f7f\u7528\u983b\u5ea6\u3092\u8ffd\u8de1\n    void trackNullptrUsage(const SourceLocation&amp; loc);\n\n    \/\/ null\u5b89\u5168\u6027\u9055\u53cd\u3092\u8a18\u9332\n    void recordViolation(const std::string&amp; rule, \n                        const SourceLocation&amp; loc);\n\n    \/\/ \u30ec\u30dd\u30fc\u30c8\u751f\u6210\n    void generateReport() const;\n};<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3068\u5de5\u5177\u3092\u9069\u5207\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30c1\u30fc\u30e0\u5168\u4f53\u3067null\u5b89\u5168\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u3092\u7dad\u6301\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3092\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b\u3067\u5177\u4f53\u7684\u306b\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-19\">\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b\u3067\u5b66\u3076null\u5b89\u5168<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">null\u3092\u4f7f\u308f\u306a\u3044\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Null Object\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30e6\u30fc\u30b6\u30fc\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u4f8b\nclass IUserRepository {\npublic:\n    virtual ~IUserRepository() = default;\n    virtual User findById(int id) = 0;\n    virtual void save(const User&amp; user) = 0;\n};\n\n\/\/ \u5b9f\u969b\u306e\u5b9f\u88c5\nclass UserRepository : public IUserRepository {\n    std::unordered_map&lt;int, User&gt; users;\npublic:\n    User findById(int id) override {\n        auto it = users.find(id);\n        return it != users.end() ? it-&gt;second : User::createNull();\n    }\n\n    void save(const User&amp; user) override {\n        users[user.getId()] = user;\n    }\n};\n\n\/\/ Null\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u5b9f\u88c5\nclass User {\n    int id;\n    std::string name;\n    bool isNull;\n\npublic:\n    User(int id, std::string name) \n        : id(id), name(std::move(name)), isNull(false) {}\n\n    static User createNull() {\n        static User nullUser(-1, \"\");\n        nullUser.isNull = true;\n        return nullUser;\n    }\n\n    bool isNullObject() const { return isNull; }\n    int getId() const { return id; }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Monad\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Maybe\u578b\u306e\u5b9f\u88c5\ntemplate&lt;typename T&gt;\nclass Maybe {\n    std::optional&lt;T&gt; value;\n\npublic:\n    Maybe() : value(std::nullopt) {}\n    explicit Maybe(const T&amp; v) : value(v) {}\n\n    template&lt;typename Func&gt;\n    auto map(Func f) const -&gt; Maybe&lt;decltype(f(std::declval&lt;T&gt;()))&gt; {\n        if (value.has_value()) {\n            return Maybe&lt;decltype(f(*value))&gt;(f(*value));\n        }\n        return Maybe&lt;decltype(f(*value))&gt;();\n    }\n\n    T valueOr(const T&amp; defaultValue) const {\n        return value.value_or(defaultValue);\n    }\n};\n\n\/\/ \u4f7f\u7528\u4f8b\nclass UserService {\n    Maybe&lt;User&gt; findUser(int id) {\n        auto user = repository.findById(id);\n        return user.isNullObject() ? Maybe&lt;User&gt;() : Maybe&lt;User&gt;(user);\n    }\n\n    void processUser(int id) {\n        findUser(id)\n            .map([](const User&amp; u) { return u.getName(); })\n            .map([](const std::string&amp; name) { \n                std::cout &lt;&lt; \"Processing user: \" &lt;&lt; name &lt;&lt; \"\\n\"; \n            });\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\u3067\u306enull\u5b89\u5168\u6027\u306e\u78ba\u4fdd<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u30d5\u30a1\u30fc\u30b9\u30c8\u30a2\u30d7\u30ed\u30fc\u30c1<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class UserServiceTest : public ::testing::Test {\nprotected:\n    UserService service;\n\n    void SetUp() override {\n        \/\/ \u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\n    }\n};\n\n\/\/ null\u5b89\u5168\u6027\u306e\u30c6\u30b9\u30c8\nTEST_F(UserServiceTest, HandleNonExistentUser) {\n    auto result = service.findUser(999);  \/\/ \u5b58\u5728\u3057\u306a\u3044ID\n    EXPECT_FALSE(result.hasValue());\n}\n\nTEST_F(UserServiceTest, HandleExistingUser) {\n    auto result = service.findUser(1);  \/\/ \u5b58\u5728\u3059\u308bID\n    EXPECT_TRUE(result.hasValue());\n    auto user = result.valueOr(User::createNull());\n    EXPECT_FALSE(user.isNullObject());\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u5883\u754c\u5024\u30c6\u30b9\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30a8\u30c3\u30b8\u30b1\u30fc\u30b9\u306e\u30c6\u30b9\u30c8\nclass EdgeCaseTest : public ::testing::Test {\nprotected:\n    std::unique_ptr&lt;UserRepository&gt; repository;\n\n    void SetUp() override {\n        repository = std::make_unique&lt;UserRepository&gt;();\n    }\n};\n\nTEST_F(EdgeCaseTest, HandleEmptyDatabase) {\n    auto user = repository-&gt;findById(1);\n    EXPECT_TRUE(user.isNullObject());\n}\n\nTEST_F(EdgeCaseTest, HandleDatabaseReset) {\n    repository-&gt;save(User(1, \"Test\"));\n    repository.reset(nullptr);\n    auto newRepo = std::make_unique&lt;UserRepository&gt;();\n    auto user = newRepo-&gt;findById(1);\n    EXPECT_TRUE(user.isNullObject());\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u306e\u4f8b\nclass AuthenticationService {\n    std::unique_ptr&lt;IUserRepository&gt; userRepo;\n    std::unique_ptr&lt;IPasswordHasher&gt; hasher;\n\npublic:\n    AuthenticationService(\n        std::unique_ptr&lt;IUserRepository&gt; repo,\n        std::unique_ptr&lt;IPasswordHasher&gt; pwdHasher)\n        : userRepo(std::move(repo))\n        , hasher(std::move(pwdHasher)) {\n\n        if (!userRepo || !hasher) {\n            throw std::invalid_argument(\"Dependencies cannot be null\");\n        }\n    }\n\n    Maybe&lt;AuthToken&gt; authenticate(const std::string&amp; username, \n                                const std::string&amp; password) {\n        return findUserByName(username)\n            .map([&amp;](const User&amp; user) {\n                return verifyPassword(user, password);\n            })\n            .map([](const User&amp; user) {\n                return generateToken(user);\n            });\n    }\n\nprivate:\n    Maybe&lt;User&gt; findUserByName(const std::string&amp; username) {\n        auto user = userRepo-&gt;findByUsername(username);\n        return user.isNullObject() ? Maybe&lt;User&gt;() : Maybe&lt;User&gt;(user);\n    }\n\n    Maybe&lt;User&gt; verifyPassword(const User&amp; user, \n                             const std::string&amp; password) {\n        return hasher-&gt;verify(password, user.getPasswordHash())\n            ? Maybe&lt;User&gt;(user)\n            : Maybe&lt;User&gt;();\n    }\n\n    static AuthToken generateToken(const User&amp; user) {\n        \/\/ \u30c8\u30fc\u30af\u30f3\u751f\u6210\u30ed\u30b8\u30c3\u30af\n        return AuthToken(user.getId(), std::time(nullptr));\n    }\n};<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c6\u30b9\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068null\u5b89\u5168\u6027\u306e\u4e21\u7acb\nclass PerformanceTest : public ::testing::Test {\nprotected:\n    static constexpr size_t LARGE_DATASET_SIZE = 1000000;\n    std::unique_ptr&lt;UserRepository&gt; repository;\n\n    void SetUp() override {\n        repository = std::make_unique&lt;UserRepository&gt;();\n        populateLargeDataset();\n    }\n\n    void populateLargeDataset() {\n        for (size_t i = 0; i &lt; LARGE_DATASET_SIZE; ++i) {\n            repository-&gt;save(User(i, \"User\" + std::to_string(i)));\n        }\n    }\n};\n\nTEST_F(PerformanceTest, HandleLargeDataset) {\n    auto start = std::chrono::high_resolution_clock::now();\n\n    for (size_t i = 0; i &lt; 1000; ++i) {\n        auto user = repository-&gt;findById(rand() % LARGE_DATASET_SIZE);\n        EXPECT_FALSE(user.isNullObject());\n    }\n\n    auto end = std::chrono::high_resolution_clock::now();\n    auto duration = std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;\n                   (end - start);\n\n    EXPECT_LT(duration.count(), 1000);  \/\/ 1\u79d2\u4ee5\u5185\u306b\u5b8c\u4e86\u3059\u3079\u304d\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u8df5\u7684\u306a\u4f8b\u3092\u901a\u3058\u3066\u3001null\u5b89\u5168\u6027\u3092\u78ba\u4fdd\u3057\u306a\u304c\u3089\u3001\u4fdd\u5b88\u6027\u304c\u9ad8\u304f\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u826f\u3044\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u65b9\u6cd5\u3092\u5b66\u3076\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u63a1\u7528\u3059\u308b\u3053\u3068\u3067\u3001null\u5b89\u5168\u6027\u306e\u78ba\u4fdd\u3068\u54c1\u8cea\u306e\u5411\u4e0a\u3092\u540c\u6642\u306b\u9054\u6210\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":{"0":"post-2042","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-cpp","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2042","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2042"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2042\/revisions"}],"predecessor-version":[{"id":2043,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2042\/revisions\/2043"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2042"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2042"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}