[{"data":1,"prerenderedAt":2423},["ShallowReactive",2],{"global-navigation":3,"page-\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop52-cpp":28,"surround-\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop52-cpp":1734,"sidebar-sei-cert-cpp-coding-standard":1741},[4,8],{"title":5,"path":6,"_path":6,"fromAppConfig":7},"Home","\u002F",true,{"title":9,"path":10,"children":11,"_path":27,"fromAppConfig":7},"Coding Standards","\u002Fcoding-standards\u002F",[12,15,18,21,24],{"title":13,"path":14},"Android Coding Standard","\u002Fandroid-secure-coding-standard\u002F",{"title":16,"path":17},"C Coding Standard","\u002Fsei-cert-c-coding-standard\u002F",{"title":19,"path":20},"C++ Coding Standard","\u002Fsei-cert-cpp-coding-standard\u002F",{"title":22,"path":23},"Java Coding Standard","\u002Fsei-cert-oracle-coding-standard-for-java\u002F",{"title":25,"path":26},"Perl Coding Standard","\u002Fsei-cert-perl-coding-standard\u002F","\u002Fcoding-standards",{"id":29,"title":30,"body":31,"description":1720,"extension":1721,"meta":1722,"navigation":7,"path":1730,"seo":1731,"stem":1732,"__hash__":1733},"content\u002F5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F04.oop52-cpp.md","OOP52-CPP. Do not delete a polymorphic object without a virtual destructor",{"type":32,"value":33,"toc":1709},"minimark",[34,38,48,63,82,87,118,127,136,266,269,280,388,392,401,505,509,516,669,686,696,1116,1120,1134,1199,1203,1596,1600,1614,1618,1643,1647,1681,1684,1705],[35,36,30],"h1",{"id":37},"oop52-cpp-do-not-delete-a-polymorphic-object-without-a-virtual-destructor",[39,40,41,42,47],"p",{},"The C++ Standard, [expr.delete], paragraph 3 [ ",[43,44,46],"a",{"href":45},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-ISO\u002FIEC14882-2014","ISO\u002FIEC 14882-2014"," ], states the following:",[49,50,51],"blockquote",{},[39,52,53,54,58,59,62],{},"In the first alternative ( ",[55,56,57],"em",{},"delete object"," ), if the static type of the object to be deleted is different from its dynamic type, the static type shall be a base class of the dynamic type of the object to be deleted and the static type shall have a virtual destructor or the behavior is undefined. In the second alternative ( ",[55,60,61],{},"delete array"," ) if the dynamic type of the object to be deleted differs from its static type, the behavior is undefined.",[39,64,65,66,70,71,73,74,76,77,81],{},"Do not delete an object of derived class type through a pointer to its base class type that has a non- ",[67,68,69],"code",{},"virtual"," destructor. Instead, the base class should be defined with a ",[67,72,69],{}," destructor. Deleting an object through a pointer to a type without a ",[67,75,69],{}," destructor results in ",[43,78,80],{"href":79},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-undefinedbehavior","undefined behavior"," .",[83,84,86],"h2",{"id":85},"noncompliant-code-example","Noncompliant Code Example",[39,88,89,90,93,94,97,98,101,102,104,105,107,108,111,112,114,115,117],{},"In this noncompliant example, ",[67,91,92],{},"b"," is a polymorphic pointer type whose static type is ",[67,95,96],{},"  Base * "," and whose dynamic type is ",[67,99,100],{},"  Derived * "," . When ",[67,103,92],{}," is deleted, it results in ",[43,106,80],{"href":79}," because ",[67,109,110],{},"Base"," does not have a ",[67,113,69],{}," destructor. The C++ Standard, [class.dtor], paragraph 4 [ ",[43,116,46],{"href":45}," ], states the following :",[49,119,120],{},[39,121,122,123,126],{},"If a class has no user-declared destructor, a destructor is implicitly declared as defaulted. An implicitly declared destructor is an ",[67,124,125],{},"   inline public  "," member of its class.",[39,128,129,130,132,133,135],{},"The implicitly declared destructor is not declared as ",[67,131,69],{}," even in the presence of other ",[67,134,69],{}," functions.",[137,138,140],"code-block",{"quality":139},"bad",[141,142,147],"pre",{"className":143,"code":144,"language":145,"meta":146,"style":146},"language-cpp shiki shiki-themes github-light github-dark monokai","struct Base {\n  virtual void f();\n};\n \nstruct Derived : Base {};\n \nvoid f() {\n  Base *b = new Derived();\n  \u002F\u002F ...\n  delete b;\n}\n","cpp","",[67,148,149,166,183,189,195,206,211,222,244,251,260],{"__ignoreMap":146},[150,151,154,158,162],"span",{"class":152,"line":153},"line",1,[150,155,157],{"class":156},"sq6CD","struct",[150,159,161],{"class":160},"sz2Vg"," Base",[150,163,165],{"class":164},"sMOD_"," {\n",[150,167,169,173,176,180],{"class":152,"line":168},2,[150,170,172],{"class":171},"sC2Qs","  virtual",[150,174,175],{"class":156}," void",[150,177,179],{"class":178},"srTi1"," f",[150,181,182],{"class":164},"();\n",[150,184,186],{"class":152,"line":185},3,[150,187,188],{"class":164},"};\n",[150,190,192],{"class":152,"line":191},4,[150,193,194],{"class":164}," \n",[150,196,198,200,203],{"class":152,"line":197},5,[150,199,157],{"class":156},[150,201,202],{"class":160}," Derived",[150,204,205],{"class":164}," : Base {};\n",[150,207,209],{"class":152,"line":208},6,[150,210,194],{"class":164},[150,212,214,217,219],{"class":152,"line":213},7,[150,215,216],{"class":156},"void",[150,218,179],{"class":178},[150,220,221],{"class":164},"() {\n",[150,223,225,228,231,234,237,240,242],{"class":152,"line":224},8,[150,226,227],{"class":164},"  Base ",[150,229,230],{"class":171},"*",[150,232,233],{"class":164},"b ",[150,235,236],{"class":171},"=",[150,238,239],{"class":171}," new",[150,241,202],{"class":178},[150,243,182],{"class":164},[150,245,247],{"class":152,"line":246},9,[150,248,250],{"class":249},"s8-w5","  \u002F\u002F ...\n",[150,252,254,257],{"class":152,"line":253},10,[150,255,256],{"class":171},"  delete",[150,258,259],{"class":164}," b;\n",[150,261,263],{"class":152,"line":262},11,[150,264,265],{"class":164},"}\n",[83,267,86],{"id":268},"noncompliant-code-example-1",[39,270,271,272,275,276,279],{},"In this noncompliant example, the explicit pointer operations have been replaced with a smart pointer object, demonstrating that smart pointers suffer from the same problem as other pointers. Because the default deleter for ",[67,273,274],{},"std::unique_ptr"," calls ",[67,277,278],{},"delete"," on the internal pointer value, the resulting behavior is identical to the previous noncompliant example.",[137,281,282],{"quality":139},[141,283,285],{"className":143,"code":284,"language":145,"meta":146,"style":146},"#include \u003Cmemory>\n \nstruct Base {\n  virtual void f();\n};\n \nstruct Derived : Base {};\n \nvoid f() {\n  std::unique_ptr\u003CBase> b = std::make_unique\u003CDerived>();\n}\n",[67,286,287,296,300,308,318,322,326,334,338,346,384],{"__ignoreMap":146},[150,288,289,292],{"class":152,"line":153},[150,290,291],{"class":171},"#include",[150,293,295],{"class":294},"sstjo"," \u003Cmemory>\n",[150,297,298],{"class":152,"line":168},[150,299,194],{"class":164},[150,301,302,304,306],{"class":152,"line":185},[150,303,157],{"class":156},[150,305,161],{"class":160},[150,307,165],{"class":164},[150,309,310,312,314,316],{"class":152,"line":191},[150,311,172],{"class":171},[150,313,175],{"class":156},[150,315,179],{"class":178},[150,317,182],{"class":164},[150,319,320],{"class":152,"line":197},[150,321,188],{"class":164},[150,323,324],{"class":152,"line":208},[150,325,194],{"class":164},[150,327,328,330,332],{"class":152,"line":213},[150,329,157],{"class":156},[150,331,202],{"class":160},[150,333,205],{"class":164},[150,335,336],{"class":152,"line":224},[150,337,194],{"class":164},[150,339,340,342,344],{"class":152,"line":246},[150,341,216],{"class":156},[150,343,179],{"class":178},[150,345,221],{"class":164},[150,347,348,351,354,357,359,362,365,367,370,373,376,378,381],{"class":152,"line":253},[150,349,350],{"class":160},"  std",[150,352,353],{"class":164},"::unique_ptr",[150,355,356],{"class":171},"\u003C",[150,358,110],{"class":164},[150,360,361],{"class":171},">",[150,363,364],{"class":164}," b ",[150,366,236],{"class":171},[150,368,369],{"class":160}," std",[150,371,372],{"class":164},"::",[150,374,375],{"class":178},"make_unique",[150,377,356],{"class":164},[150,379,380],{"class":160},"Derived",[150,382,383],{"class":164},">();\n",[150,385,386],{"class":152,"line":262},[150,387,265],{"class":164},[83,389,391],{"id":390},"compliant-solution","Compliant Solution",[39,393,394,395,397,398,400],{},"In this compliant solution, the destructor for ",[67,396,110],{}," has an explicitly declared ",[67,399,69],{}," destructor, ensuring that the polymorphic delete operation results in well-defined behavior.",[137,402,404],{"quality":403},"good",[141,405,407],{"className":143,"code":406,"language":145,"meta":146,"style":146},"struct Base {\n  virtual ~Base() = default;\n  virtual void f();\n};\n\nstruct Derived : Base {};\n\nvoid f() {\n  Base *b = new Derived();\n  \u002F\u002F ...\n  delete b;\n}\n",[67,408,409,417,435,445,449,454,462,466,474,490,494,500],{"__ignoreMap":146},[150,410,411,413,415],{"class":152,"line":153},[150,412,157],{"class":156},[150,414,161],{"class":160},[150,416,165],{"class":164},[150,418,419,421,424,427,429,432],{"class":152,"line":168},[150,420,172],{"class":171},[150,422,423],{"class":178}," ~Base",[150,425,426],{"class":164},"() ",[150,428,236],{"class":171},[150,430,431],{"class":171}," default",[150,433,434],{"class":164},";\n",[150,436,437,439,441,443],{"class":152,"line":185},[150,438,172],{"class":171},[150,440,175],{"class":156},[150,442,179],{"class":178},[150,444,182],{"class":164},[150,446,447],{"class":152,"line":191},[150,448,188],{"class":164},[150,450,451],{"class":152,"line":197},[150,452,453],{"emptyLinePlaceholder":7},"\n",[150,455,456,458,460],{"class":152,"line":208},[150,457,157],{"class":156},[150,459,202],{"class":160},[150,461,205],{"class":164},[150,463,464],{"class":152,"line":213},[150,465,453],{"emptyLinePlaceholder":7},[150,467,468,470,472],{"class":152,"line":224},[150,469,216],{"class":156},[150,471,179],{"class":178},[150,473,221],{"class":164},[150,475,476,478,480,482,484,486,488],{"class":152,"line":246},[150,477,227],{"class":164},[150,479,230],{"class":171},[150,481,233],{"class":164},[150,483,236],{"class":171},[150,485,239],{"class":171},[150,487,202],{"class":178},[150,489,182],{"class":164},[150,491,492],{"class":152,"line":253},[150,493,250],{"class":249},[150,495,496,498],{"class":152,"line":262},[150,497,256],{"class":171},[150,499,259],{"class":164},[150,501,503],{"class":152,"line":502},12,[150,504,265],{"class":164},[83,506,508],{"id":507},"exceptions","Exceptions",[39,510,511,515],{},[512,513,514],"strong",{},"OOP52-CPP:EX0"," : Deleting a polymorphic object without a virtual destructor is permitted if the object is referenced by a pointer to its class, rather than via a pointer to a class it inherits from.",[137,517,518],{"quality":403},[141,519,521],{"className":143,"code":520,"language":145,"meta":146,"style":146},"class Base {\npublic:\n  \u002F\u002F ...\n  virtual void AddRef() = 0;\n  virtual void Destroy() = 0;\n};\n\nclass Derived final : public Base {\npublic:\n  \u002F\u002F ...\n  virtual void AddRef() { \u002F* ... *\u002F }\n  virtual void Destroy() { delete this; }\nprivate:\n  ~Derived() {}\n};\n",[67,522,523,532,537,541,560,577,581,585,604,608,612,629,649,655,664],{"__ignoreMap":146},[150,524,525,528,530],{"class":152,"line":153},[150,526,527],{"class":156},"class",[150,529,161],{"class":160},[150,531,165],{"class":164},[150,533,534],{"class":152,"line":168},[150,535,536],{"class":156},"public:\n",[150,538,539],{"class":152,"line":185},[150,540,250],{"class":249},[150,542,543,545,547,550,552,554,558],{"class":152,"line":191},[150,544,172],{"class":171},[150,546,175],{"class":156},[150,548,549],{"class":178}," AddRef",[150,551,426],{"class":164},[150,553,236],{"class":171},[150,555,557],{"class":556},"s7F3e"," 0",[150,559,434],{"class":164},[150,561,562,564,566,569,571,573,575],{"class":152,"line":197},[150,563,172],{"class":171},[150,565,175],{"class":156},[150,567,568],{"class":178}," Destroy",[150,570,426],{"class":164},[150,572,236],{"class":171},[150,574,557],{"class":556},[150,576,434],{"class":164},[150,578,579],{"class":152,"line":208},[150,580,188],{"class":164},[150,582,583],{"class":152,"line":213},[150,584,453],{"emptyLinePlaceholder":7},[150,586,587,589,591,594,597,600,602],{"class":152,"line":224},[150,588,527],{"class":156},[150,590,202],{"class":160},[150,592,593],{"class":156}," final",[150,595,596],{"class":164}," : ",[150,598,599],{"class":156},"public",[150,601,161],{"class":160},[150,603,165],{"class":164},[150,605,606],{"class":152,"line":246},[150,607,536],{"class":156},[150,609,610],{"class":152,"line":253},[150,611,250],{"class":249},[150,613,614,616,618,620,623,626],{"class":152,"line":262},[150,615,172],{"class":171},[150,617,175],{"class":156},[150,619,549],{"class":178},[150,621,622],{"class":164},"() {",[150,624,625],{"class":249}," \u002F* ... *\u002F",[150,627,628],{"class":164}," }\n",[150,630,631,633,635,637,640,642,646],{"class":152,"line":502},[150,632,172],{"class":171},[150,634,175],{"class":156},[150,636,568],{"class":178},[150,638,639],{"class":164},"() { ",[150,641,278],{"class":171},[150,643,645],{"class":644},"sP7S_"," this",[150,647,648],{"class":164},"; }\n",[150,650,652],{"class":152,"line":651},13,[150,653,654],{"class":156},"private:\n",[150,656,658,661],{"class":152,"line":657},14,[150,659,660],{"class":178},"  ~Derived",[150,662,663],{"class":164},"() {}\n",[150,665,667],{"class":152,"line":666},15,[150,668,188],{"class":164},[39,670,671,672,674,675,678,679,682,683,685],{},"Note that if ",[67,673,380],{}," were not marked as ",[67,676,677],{},"final"," , then ",[67,680,681],{},"  delete this "," could actually reference a subclass of ",[67,684,380],{}," , violating this rule.",[39,687,688,691,692,695],{},[512,689,690],{},"OOP52-CPP:EX1"," : Deleting a polymorphic object without a virtual destructor is permitted if its base class has a destroying ",[67,693,694],{},"  operator delete "," that will figure out the correct derived class's destructor to call by other means.",[137,697,698],{"quality":403},[141,699,701],{"className":143,"code":700,"language":145,"meta":146,"style":146},"#include \u003Cnew>\n\nclass Base {\n  const int whichDerived;\n\nprotected:\n  Base(int whichDerived) : whichDerived(whichDerived) {}\n\npublic:\n  Base() : Base(0) {}\n  void operator delete(Base *, std::destroying_delete_t);\n};\n\nstruct Derived1 final : Base {\n  Derived1() : Base(1) {}\n};\n\nstruct Derived2 final : Base {\n  Derived2() : Base(2) {}\n};\n\nvoid Base::operator delete(Base *b, std::destroying_delete_t) {\n  switch (b->whichDerived) {\n  case 0:\n    b->~Base();\n    break;\n  case 1:\n    static_cast\u003CDerived1 *>(b)->~Derived1();\n    break;\n  case 2:\n    static_cast\u003CDerived2 *>(b)->~Derived2();\n  }\n  ::operator delete(b);\n}\n\nvoid f() {\n  Base *b = new Derived1();\n  \u002F\u002F ...\n  delete b;\n}\n",[67,702,703,710,714,722,733,737,742,766,770,774,791,825,829,833,845,861,866,871,883,900,905,910,943,952,963,974,982,992,1012,1019,1029,1046,1052,1063,1068,1073,1082,1099,1104,1111],{"__ignoreMap":146},[150,704,705,707],{"class":152,"line":153},[150,706,291],{"class":171},[150,708,709],{"class":294}," \u003Cnew>\n",[150,711,712],{"class":152,"line":168},[150,713,453],{"emptyLinePlaceholder":7},[150,715,716,718,720],{"class":152,"line":185},[150,717,527],{"class":156},[150,719,161],{"class":160},[150,721,165],{"class":164},[150,723,724,727,730],{"class":152,"line":191},[150,725,726],{"class":171},"  const",[150,728,729],{"class":156}," int",[150,731,732],{"class":164}," whichDerived;\n",[150,734,735],{"class":152,"line":197},[150,736,453],{"emptyLinePlaceholder":7},[150,738,739],{"class":152,"line":208},[150,740,741],{"class":156},"protected:\n",[150,743,744,747,750,753,757,760,763],{"class":152,"line":213},[150,745,746],{"class":178},"  Base",[150,748,749],{"class":164},"(",[150,751,752],{"class":156},"int",[150,754,756],{"class":755},"sTHNf"," whichDerived",[150,758,759],{"class":164},") : ",[150,761,762],{"class":178},"whichDerived",[150,764,765],{"class":164},"(whichDerived) {}\n",[150,767,768],{"class":152,"line":224},[150,769,453],{"emptyLinePlaceholder":7},[150,771,772],{"class":152,"line":246},[150,773,536],{"class":156},[150,775,776,778,781,783,785,788],{"class":152,"line":253},[150,777,746],{"class":178},[150,779,780],{"class":164},"() : ",[150,782,110],{"class":178},[150,784,749],{"class":164},[150,786,787],{"class":556},"0",[150,789,790],{"class":164},") {}\n",[150,792,793,796,799,803,805,807,810,813,816,818,822],{"class":152,"line":262},[150,794,795],{"class":156},"  void",[150,797,798],{"class":171}," operator",[150,800,802],{"class":801},"s_OQ2"," delete",[150,804,749],{"class":164},[150,806,110],{"class":160},[150,808,809],{"class":171}," *",[150,811,812],{"class":164},", ",[150,814,815],{"class":160},"std",[150,817,372],{"class":164},[150,819,821],{"class":820},"s-m8C","destroying_delete_t",[150,823,824],{"class":164},");\n",[150,826,827],{"class":152,"line":502},[150,828,188],{"class":164},[150,830,831],{"class":152,"line":651},[150,832,453],{"emptyLinePlaceholder":7},[150,834,835,837,840,842],{"class":152,"line":657},[150,836,157],{"class":156},[150,838,839],{"class":160}," Derived1",[150,841,593],{"class":156},[150,843,844],{"class":164}," : Base {\n",[150,846,847,850,852,854,856,859],{"class":152,"line":666},[150,848,849],{"class":178},"  Derived1",[150,851,780],{"class":164},[150,853,110],{"class":178},[150,855,749],{"class":164},[150,857,858],{"class":556},"1",[150,860,790],{"class":164},[150,862,864],{"class":152,"line":863},16,[150,865,188],{"class":164},[150,867,869],{"class":152,"line":868},17,[150,870,453],{"emptyLinePlaceholder":7},[150,872,874,876,879,881],{"class":152,"line":873},18,[150,875,157],{"class":156},[150,877,878],{"class":160}," Derived2",[150,880,593],{"class":156},[150,882,844],{"class":164},[150,884,886,889,891,893,895,898],{"class":152,"line":885},19,[150,887,888],{"class":178},"  Derived2",[150,890,780],{"class":164},[150,892,110],{"class":178},[150,894,749],{"class":164},[150,896,897],{"class":556},"2",[150,899,790],{"class":164},[150,901,903],{"class":152,"line":902},20,[150,904,188],{"class":164},[150,906,908],{"class":152,"line":907},21,[150,909,453],{"emptyLinePlaceholder":7},[150,911,913,915,917,919,922,924,926,928,930,932,934,936,938,940],{"class":152,"line":912},22,[150,914,216],{"class":156},[150,916,161],{"class":160},[150,918,372],{"class":164},[150,920,921],{"class":171},"operator",[150,923,802],{"class":801},[150,925,749],{"class":164},[150,927,110],{"class":160},[150,929,809],{"class":171},[150,931,92],{"class":755},[150,933,812],{"class":164},[150,935,815],{"class":160},[150,937,372],{"class":164},[150,939,821],{"class":820},[150,941,942],{"class":164},") {\n",[150,944,946,949],{"class":152,"line":945},23,[150,947,948],{"class":171},"  switch",[150,950,951],{"class":164}," (b->whichDerived) {\n",[150,953,955,958,960],{"class":152,"line":954},24,[150,956,957],{"class":171},"  case",[150,959,557],{"class":556},[150,961,962],{"class":164},":\n",[150,964,966,969,972],{"class":152,"line":965},25,[150,967,968],{"class":164},"    b->",[150,970,971],{"class":178},"~Base",[150,973,182],{"class":164},[150,975,977,980],{"class":152,"line":976},26,[150,978,979],{"class":171},"    break",[150,981,434],{"class":164},[150,983,985,987,990],{"class":152,"line":984},27,[150,986,957],{"class":171},[150,988,989],{"class":556}," 1",[150,991,962],{"class":164},[150,993,995,998,1001,1004,1007,1010],{"class":152,"line":994},28,[150,996,997],{"class":171},"    static_cast\u003C",[150,999,1000],{"class":164},"Derived1 ",[150,1002,1003],{"class":171},"*>",[150,1005,1006],{"class":164},"(b)->",[150,1008,1009],{"class":178},"~Derived1",[150,1011,182],{"class":164},[150,1013,1015,1017],{"class":152,"line":1014},29,[150,1016,979],{"class":171},[150,1018,434],{"class":164},[150,1020,1022,1024,1027],{"class":152,"line":1021},30,[150,1023,957],{"class":171},[150,1025,1026],{"class":556}," 2",[150,1028,962],{"class":164},[150,1030,1032,1034,1037,1039,1041,1044],{"class":152,"line":1031},31,[150,1033,997],{"class":171},[150,1035,1036],{"class":164},"Derived2 ",[150,1038,1003],{"class":171},[150,1040,1006],{"class":164},[150,1042,1043],{"class":178},"~Derived2",[150,1045,182],{"class":164},[150,1047,1049],{"class":152,"line":1048},32,[150,1050,1051],{"class":164},"  }\n",[150,1053,1055,1058,1060],{"class":152,"line":1054},33,[150,1056,1057],{"class":164},"  ::operator ",[150,1059,278],{"class":171},[150,1061,1062],{"class":164},"(b);\n",[150,1064,1066],{"class":152,"line":1065},34,[150,1067,265],{"class":164},[150,1069,1071],{"class":152,"line":1070},35,[150,1072,453],{"emptyLinePlaceholder":7},[150,1074,1076,1078,1080],{"class":152,"line":1075},36,[150,1077,216],{"class":156},[150,1079,179],{"class":178},[150,1081,221],{"class":164},[150,1083,1085,1087,1089,1091,1093,1095,1097],{"class":152,"line":1084},37,[150,1086,227],{"class":164},[150,1088,230],{"class":171},[150,1090,233],{"class":164},[150,1092,236],{"class":171},[150,1094,239],{"class":171},[150,1096,839],{"class":178},[150,1098,182],{"class":164},[150,1100,1102],{"class":152,"line":1101},38,[150,1103,250],{"class":249},[150,1105,1107,1109],{"class":152,"line":1106},39,[150,1108,256],{"class":171},[150,1110,259],{"class":164},[150,1112,1114],{"class":152,"line":1113},40,[150,1115,265],{"class":164},[83,1117,1119],{"id":1118},"risk-assessment","Risk Assessment",[39,1121,1122,1123,1125,1126,1128,1129,1133],{},"Attempting to destruct a polymorphic object that does not have a ",[67,1124,69],{}," destructor declared results in ",[43,1127,80],{"href":79}," . In practice, potential consequences include ",[43,1130,1132],{"href":1131},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-abnormaltermination","abnormal program termination"," and memory leaks.",[1135,1136,1137,1138,1137,1168],"table",{},"\n  ",[1139,1140,1141,1142,1137],"thead",{},"\n    ",[1143,1144,1145,1146,1145,1150,1145,1153,1145,1156,1145,1159,1145,1162,1145,1165,1141],"tr",{},"\n      ",[1147,1148,1149],"th",{},"Rule",[1147,1151,1152],{},"Severity",[1147,1154,1155],{},"Likelihood",[1147,1157,1158],{},"Detectable",[1147,1160,1161],{},"Repairable",[1147,1163,1164],{},"Priority",[1147,1166,1167],{},"Level",[1169,1170,1141,1171,1137],"tbody",{},[1143,1172,1145,1173,1145,1177,1145,1180,1145,1183,1145,1186,1145,1188,1145,1194,1141],{},[1174,1175,1176],"td",{},"OOP52-CPP",[1174,1178,1179],{},"Low",[1174,1181,1182],{},"Likely",[1174,1184,1185],{},"No",[1174,1187,1185],{},[1174,1189,1191],{"style":1190},"color: #27ae60;",[92,1192,1193],{},"P3",[1174,1195,1196],{"style":1190},[92,1197,1198],{},"L3",[83,1200,1202],{"id":1201},"automated-detection","Automated Detection",[1135,1204,1207,1233],{"className":1205},[1206],"wrapped",[1139,1208,1209],{},[1143,1210,1213,1218,1223,1228],{"className":1211},[1212],"header",[1147,1214,1215],{},[39,1216,1217],{},"Tool",[1147,1219,1220],{},[39,1221,1222],{},"Version",[1147,1224,1225],{},[39,1226,1227],{},"Checker",[1147,1229,1230],{},[39,1231,1232],{},"Description",[1169,1234,1235,1266,1293,1317,1344,1372,1402,1434,1460,1486,1522,1544,1569],{},[1143,1236,1239,1245,1255,1263],{"className":1237},[1238],"odd",[1174,1240,1241],{},[43,1242,1244],{"href":1243},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fastree","Astrée",[1174,1246,1247],{},[1248,1249,1252],"div",{"className":1250},[1251],"content-wrapper",[39,1253,1254],{},"25.10",[1174,1256,1257],{},[512,1258,1259,1260],{},"non-virtual-public-destructor-in-non-final-class",[1261,1262],"br",{},[1174,1264,1265],{},"Partially checked",[1143,1267,1270,1276,1284,1289],{"className":1268},[1269],"even",[1174,1271,1272],{},[43,1273,1275],{"href":1274},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Faxivion-bauhaus-suite","Axivion Bauhaus Suite",[1174,1277,1278],{},[1248,1279,1281],{"className":1280},[1251],[39,1282,1283],{},"7.2.0",[1174,1285,1286],{},[512,1287,1288],{},"CertC++-OOP52",[1174,1290,1291],{},[1261,1292],{},[1143,1294,1296,1302,1308,1313],{"className":1295},[1238],[1174,1297,1298],{},[43,1299,1301],{"href":1300},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fclang","Clang",[1174,1303,1304],{},[1248,1305,1307],{"className":1306},[1251],"3.9",[1174,1309,1310],{},[67,1311,1312],{},"      -Wdelete-non-virtual-dtor     ",[1174,1314,1315],{},[1261,1316],{},[1143,1318,1320,1326,1332,1339],{"className":1319},[1269],[1174,1321,1322],{},[43,1323,1325],{"href":1324},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcodesonar","CodeSonar",[1174,1327,1328],{},[1248,1329,1331],{"className":1330},[1251],"9.1p0",[1174,1333,1334],{},[39,1335,1336],{},[512,1337,1338],{},"LANG.STRUCT.DNVD",[1174,1340,1341],{},[39,1342,1343],{},"delete with Non-Virtual Destructor",[1143,1345,1347,1353,1361,1368],{"className":1346},[1238],[1174,1348,1349],{},[43,1350,1352],{"href":1351},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fhelix-qac","Helix QAC",[1174,1354,1355],{},[1248,1356,1358],{"className":1357},[1251],[39,1359,1360],{},"2025.2",[1174,1362,1363],{},[39,1364,1365],{},[512,1366,1367],{},"C++3402, C++3403, C++3404",[1174,1369,1370],{},[1261,1371],{},[1143,1373,1375,1381,1386,1398],{"className":1374},[1269],[1174,1376,1377],{},[43,1378,1380],{"href":1379},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fklocwork","Klocwork",[1174,1382,1383],{},[1248,1384,1360],{"className":1385},[1251],[1174,1387,1388],{},[39,1389,1390,1393,1395],{},[512,1391,1392],{},"CL.MLK.VIRTUAL",[1261,1394],{},[512,1396,1397],{},"CWARN.DTOR.NONVIRT.DELETE",[1174,1399,1400],{},[1261,1401],{},[1143,1403,1405,1411,1417,1429],{"className":1404},[1238],[1174,1406,1407],{},[43,1408,1410],{"href":1409},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fldra","LDRA tool suite",[1174,1412,1413],{},[1248,1414,1416],{"className":1415},[1251],"9.7.1",[1174,1418,1419],{},[39,1420,1421,1424,1425],{},[512,1422,1423],{},"303 S"," ",[512,1426,1427],{},[1261,1428],{},[1174,1430,1431],{},[39,1432,1433],{},"Partially implemented",[1143,1435,1437,1443,1448,1455],{"className":1436},[1269],[1174,1438,1439],{},[43,1440,1442],{"href":1441},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fparasoft","Parasoft C\u002FC++test",[1174,1444,1445],{},[1248,1446,1360],{"className":1447},[1251],[1174,1449,1450],{},[39,1451,1452],{},[512,1453,1454],{},"CERT_CPP-OOP52-a",[1174,1456,1457],{},[39,1458,1459],{},"Define a virtual destructor in classes used as base classes which have virtual functions",[1143,1461,1463,1469,1477,1483],{"className":1462},[1238],[1174,1464,1465],{},[43,1466,1468],{"href":1467},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fpolyspace-bug-finder","Polyspace Bug Finder",[1174,1470,1471],{},[1248,1472,1474],{"className":1473},[1251],[39,1475,1476],{},"R2025b",[1174,1478,1479],{},[43,1480,1482],{"href":1481},"https:\u002F\u002Fwww.mathworks.com\u002Fhelp\u002Fbugfinder\u002Fref\u002Fcertcoop52cpp.html","CERT C++: OOP52-CPP",[1174,1484,1485],{},"Checks for situations when a class has virtual functions but not a virtual destructor (rule partially covered)",[1143,1487,1489,1495,1503,1518],{"className":1488},[1269],[1174,1490,1491],{},[43,1492,1494],{"href":1493},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fpvs-studio","PVS-Studio",[1174,1496,1497],{},[1248,1498,1500],{"className":1499},[1251],[39,1501,1502],{},"7.42",[1174,1504,1505,1511,1512],{},[43,1506,1508],{"href":1507},"https:\u002F\u002Fpvs-studio.com\u002Fen\u002Fdocs\u002Fwarnings\u002Fv599\u002F",[512,1509,1510],{},"V599"," , ",[512,1513,1514],{},[43,1515,1517],{"href":1516},"https:\u002F\u002Fpvs-studio.com\u002Fen\u002Fdocs\u002Fwarnings\u002Fv689\u002F","V689",[1174,1519,1520],{},[1261,1521],{},[1143,1523,1525,1531,1536,1542],{"className":1524},[1238],[1174,1526,1527],{},[43,1528,1530],{"href":1529},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Frulechecker","RuleChecker",[1174,1532,1533],{},[1248,1534,1254],{"className":1535},[1251],[1174,1537,1538],{},[512,1539,1259,1540],{},[1261,1541],{},[1174,1543,1265],{},[1143,1545,1547,1553,1561,1566],{"className":1546},[1269],[1174,1548,1549],{},[43,1550,1552],{"href":1551},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsecurity-reviewer-static-reviewer","Security Reviewer - Static Reviewer",[1174,1554,1555],{},[1248,1556,1558],{"className":1557},[1251],[39,1559,1560],{},"6.02",[1174,1562,1563],{},[512,1564,1565],{},"UNSAFE_06",[1174,1567,1568],{},"Fully Implemented",[1143,1570,1572,1578,1584,1592],{"className":1571},[1238],[1174,1573,1574],{},[43,1575,1577],{"href":1576},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsonarqube-ccpp-plugin","SonarQube C\u002FC++ Plugin",[1174,1579,1580],{},[1248,1581,1583],{"className":1582},[1251],"4.10",[1174,1585,1586],{},[512,1587,1588],{},[43,1589,1591],{"href":1590},"https:\u002F\u002Fwww.sonarsource.com\u002Fproducts\u002Fcodeanalyzers\u002Fsonarcfamilyforcpp\u002Frules-cpp.html#RSPEC-1235","S1235",[1174,1593,1594],{},[1261,1595],{},[83,1597,1599],{"id":1598},"related-vulnerabilities","Related Vulnerabilities",[39,1601,1602,1603,1607,1608,81],{},"Search for other ",[43,1604,1606],{"href":1605},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-vulnerability","vulnerabilities"," resulting from the violation of this rule on the ",[43,1609,1613],{"href":1610,"rel":1611},"https:\u002F\u002Fwww.kb.cert.org\u002Fvulnotes\u002Fbymetric?searchview&query=FIELD+KEYWORDS+contains+OOP52-CPP",[1612],"nofollow","CERT website",[83,1615,1617],{"id":1616},"related-guidelines","Related Guidelines",[1135,1619,1620,1628],{},[1139,1621,1622],{},[1143,1623,1624,1626],{},[1147,1625],{},[1147,1627],{},[1169,1629,1630],{},[1143,1631,1632,1637],{},[1174,1633,1634],{},[43,1635,1636],{"href":20},"SEI CERT C++ Coding Standard",[1174,1638,1639],{},[43,1640,1642],{"href":1641},"\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp51-cpp","EXP51-CPP. Do not delete an array through a pointer of the incorrect type",[83,1644,1646],{"id":1645},"bibliography","Bibliography",[1135,1648,1650],{"className":1649},[1206],[1169,1651,1652,1669],{},[1143,1653,1655,1661],{"className":1654},[1238],[1174,1656,1657,1658,1660],{},"[ ",[43,1659,46],{"href":45}," ]",[1174,1662,1663],{},[39,1664,1665,1666,1668],{},"Subclause 5.3.5, \"Delete\"",[1261,1667],{},"\nSubclause 12.4, \"Destructors\"",[1143,1670,1672,1678],{"className":1671},[1269],[1174,1673,1657,1674,1660],{},[43,1675,1677],{"href":1676},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-Stroustrup06","Stroustrup 2006",[1174,1679,1680],{},"\"Why Are Destructors Not Virtual by Default?\"",[1682,1683],"hr",{},[39,1685,1686,1424,1693,1424,1699],{},[43,1687,1689],{"href":1688},"\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop51-cpp",[1690,1691],"img",{"src":1692},"\u002Fattachments\u002F88046682\u002F88480621.png",[43,1694,1696],{"href":1695},"\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002F",[1690,1697],{"src":1698},"\u002Fattachments\u002F88046682\u002F88475556.png",[43,1700,1702],{"href":1701},"\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop53-cpp",[1690,1703],{"src":1704},"\u002Fattachments\u002F88046682\u002F88475555.png",[1706,1707,1708],"style",{},"html pre.shiki code .sq6CD, html code.shiki .sq6CD{--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sz2Vg, html code.shiki .sz2Vg{--shiki-default:#6F42C1;--shiki-default-text-decoration:inherit;--shiki-dark:#B392F0;--shiki-dark-text-decoration:inherit;--shiki-sepia:#A6E22E;--shiki-sepia-text-decoration:underline}html pre.shiki code .sMOD_, html code.shiki .sMOD_{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sC2Qs, html code.shiki .sC2Qs{--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .srTi1, html code.shiki .srTi1{--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .s8-w5, html code.shiki .s8-w5{--shiki-default:#6A737D;--shiki-dark:#6A737D;--shiki-sepia:#88846F}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .sstjo, html code.shiki .sstjo{--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .s7F3e, html code.shiki .s7F3e{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .sP7S_, html code.shiki .sP7S_{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#FD971F}html pre.shiki code .sTHNf, html code.shiki .sTHNf{--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit;--shiki-sepia:#FD971F;--shiki-sepia-font-style:italic}html pre.shiki code .s_OQ2, html code.shiki .s_OQ2{--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#F8F8F2}html pre.shiki code .s-m8C, html code.shiki .s-m8C{--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}",{"title":146,"searchDepth":168,"depth":168,"links":1710},[1711,1712,1713,1714,1715,1716,1717,1718,1719],{"id":85,"depth":168,"text":86},{"id":268,"depth":168,"text":86},{"id":390,"depth":168,"text":391},{"id":507,"depth":168,"text":508},{"id":1118,"depth":168,"text":1119},{"id":1201,"depth":168,"text":1202},{"id":1598,"depth":168,"text":1599},{"id":1616,"depth":168,"text":1617},{"id":1645,"depth":168,"text":1646},"The C++ Standard, [expr.delete], paragraph 3 [ ISO\u002FIEC 14882-2014 ], states the following:","md",{"tags":1723},[1724,1725,1726,1727,1728,1729],"review","oop","ptc","review-dms","rule","review-ajb","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop52-cpp",{"title":30,"description":1720},"5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F04.oop52-cpp","l3qPihoRJMdfF9vOdqlfm0QHbuwa1MuPK9uVQT7kwyU",[1735,1738],{"title":1736,"path":1688,"stem":1737,"children":-1},"OOP51-CPP. Do not slice derived objects","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F03.oop51-cpp",{"title":1739,"path":1701,"stem":1740,"children":-1},"OOP53-CPP. Write constructor member initializers in the canonical order","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F05.oop53-cpp",[1742],{"title":1636,"path":1743,"stem":1744,"children":1745},"\u002Fsei-cert-cpp-coding-standard","5.sei-cert-cpp-coding-standard\u002F1.index",[1746,1747,1814,2207,2409,2419],{"title":1636,"path":1743,"stem":1744},{"title":1748,"path":1749,"stem":1750,"children":1751},"Front Matter","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F1.index",[1752,1753],{"title":1748,"path":1749,"stem":1750},{"title":1754,"path":1755,"stem":1756,"children":1757},"Introduction","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F01.index",[1758,1759,1763,1767,1771,1775,1779,1783,1787,1791,1795,1799,1803,1807,1811],{"title":1754,"path":1755,"stem":1756},{"title":1760,"path":1761,"stem":1762},"Scope","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fscope","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F02.scope",{"title":1764,"path":1765,"stem":1766},"Audience","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Faudience","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F03.audience",{"title":1768,"path":1769,"stem":1770},"Usage","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fusage","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F04.usage",{"title":1772,"path":1773,"stem":1774},"How this Coding Standard Is Organized","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fhow-this-coding-standard-is-organized","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F05.how-this-coding-standard-is-organized",{"title":1776,"path":1777,"stem":1778},"Relation to the CERT C Coding Standard","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Frelation-to-the-cert-c-coding-standard","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F06.relation-to-the-cert-c-coding-standard",{"title":1780,"path":1781,"stem":1782},"Rules Versus Recommendations","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Frules-versus-recommendations","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F07.rules-versus-recommendations",{"title":1784,"path":1785,"stem":1786},"Tool Selection and Validation","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Ftool-selection-and-validation","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F08.tool-selection-and-validation",{"title":1788,"path":1789,"stem":1790},"Conformance Testing","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fconformance-testing","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F09.conformance-testing",{"title":1792,"path":1793,"stem":1794},"Development Process","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fdevelopment-process","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F10.development-process",{"title":1796,"path":1797,"stem":1798},"System Qualities","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fsystem-qualities","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F11.system-qualities",{"title":1800,"path":1801,"stem":1802},"Automatically Generated Code","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fautomatically-generated-code","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F12.automatically-generated-code",{"title":1804,"path":1805,"stem":1806},"Government Regulations","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fgovernment-regulations","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F13.government-regulations",{"title":1808,"path":1809,"stem":1810},"Acknowledgments","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Facknowledgments","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F14.acknowledgments",{"title":1202,"path":1812,"stem":1813},"\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fautomated-detection","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F15.automated-detection",{"title":1815,"path":1816,"stem":1817,"children":1818},"Rules","\u002Fsei-cert-cpp-coding-standard\u002Frules","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F01.index",[1819,1820,1842,1876,1918,1968,2026,2086,2100,2110,2148,2174],{"title":1815,"path":1816,"stem":1817},{"title":1821,"path":1822,"stem":1823,"children":1824},"Characters and Strings (STR)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcharacters-and-strings-str","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F02.characters-and-strings-str\u002F1.index",[1825,1826,1830,1834,1838],{"title":1821,"path":1822,"stem":1823},{"title":1827,"path":1828,"stem":1829},"STR50-CPP. Guarantee that storage for strings has sufficient space for character data and the null terminator","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcharacters-and-strings-str\u002Fstr50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F02.characters-and-strings-str\u002F2.str50-cpp",{"title":1831,"path":1832,"stem":1833},"STR52-CPP. Use valid references, pointers, and iterators to reference elements of a basic_string","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcharacters-and-strings-str\u002Fstr52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F02.characters-and-strings-str\u002F3.str52-cpp",{"title":1835,"path":1836,"stem":1837},"STR53-CPP. Range check element access","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcharacters-and-strings-str\u002Fstr53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F02.characters-and-strings-str\u002F4.str53-cpp",{"title":1839,"path":1840,"stem":1841},"string from a null pointer","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcharacters-and-strings-str\u002Fstring-from-a-null-pointer","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F02.characters-and-strings-str\u002F5.string-from-a-null-pointer",{"title":1843,"path":1844,"stem":1845,"children":1846},"Concurrency (CON)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F1.index",[1847,1848,1852,1856,1860,1864,1868,1872],{"title":1843,"path":1844,"stem":1845},{"title":1849,"path":1850,"stem":1851},"CON50-CPP. Do not destroy a mutex while it is locked","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F2.con50-cpp",{"title":1853,"path":1854,"stem":1855},"CON51-CPP. Ensure actively held locks are released on exceptional conditions","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F3.con51-cpp",{"title":1857,"path":1858,"stem":1859},"CON52-CPP. Prevent data races when accessing bit-fields from multiple threads","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F4.con52-cpp",{"title":1861,"path":1862,"stem":1863},"CON53-CPP. Avoid deadlock by locking in a predefined order","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F5.con53-cpp",{"title":1865,"path":1866,"stem":1867},"CON54-CPP. Wrap functions that can spuriously wake up in a loop","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F6.con54-cpp",{"title":1869,"path":1870,"stem":1871},"CON55-CPP. Preserve thread safety and liveness when using condition variables","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F7.con55-cpp",{"title":1873,"path":1874,"stem":1875},"CON56-CPP. Do not speculatively lock a non-recursive mutex that is already owned by the calling thread","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F8.con56-cpp",{"title":1877,"path":1878,"stem":1879,"children":1880},"Containers (CTR)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F01.index",[1881,1882,1886,1890,1894,1898,1902,1906,1910,1914],{"title":1877,"path":1878,"stem":1879},{"title":1883,"path":1884,"stem":1885},"CTR50-CPP. Guarantee that container indices and iterators are within the valid range","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F02.ctr50-cpp",{"title":1887,"path":1888,"stem":1889},"CTR51-CPP. Use valid references, pointers, and iterators to reference elements of a container","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F03.ctr51-cpp",{"title":1891,"path":1892,"stem":1893},"CTR52-CPP. Guarantee that library functions do not overflow","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F04.ctr52-cpp",{"title":1895,"path":1896,"stem":1897},"CTR53-CPP. Use valid iterator ranges","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F05.ctr53-cpp",{"title":1899,"path":1900,"stem":1901},"CTR54-CPP. Do not subtract iterators that do not refer to the same container","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F06.ctr54-cpp",{"title":1903,"path":1904,"stem":1905},"CTR55-CPP. Do not use an additive operator on an iterator if the result would overflow","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F07.ctr55-cpp",{"title":1907,"path":1908,"stem":1909},"CTR56-CPP. Do not use pointer arithmetic on polymorphic objects","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F08.ctr56-cpp",{"title":1911,"path":1912,"stem":1913},"CTR57-CPP. Provide a valid ordering predicate","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F09.ctr57-cpp",{"title":1915,"path":1916,"stem":1917},"CTR58-CPP. Predicate function objects should not be mutable","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr58-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F10.ctr58-cpp",{"title":1919,"path":1920,"stem":1921,"children":1922},"Declarations and Initialization (DCL)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F01.index",[1923,1924,1928,1932,1936,1940,1944,1948,1952,1956,1960,1964],{"title":1919,"path":1920,"stem":1921},{"title":1925,"path":1926,"stem":1927},"DCL50-CPP. Do not define a C-style variadic function","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F02.dcl50-cpp",{"title":1929,"path":1930,"stem":1931},"DCL51-CPP. Do not declare or define a reserved identifier","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F03.dcl51-cpp",{"title":1933,"path":1934,"stem":1935},"DCL52-CPP. Never qualify a reference type with const or volatile","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F04.dcl52-cpp",{"title":1937,"path":1938,"stem":1939},"DCL53-CPP. Do not write syntactically ambiguous declarations","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F05.dcl53-cpp",{"title":1941,"path":1942,"stem":1943},"DCL54-CPP. Overload allocation and deallocation functions as a pair in the same scope","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F06.dcl54-cpp",{"title":1945,"path":1946,"stem":1947},"DCL55-CPP. Avoid information leakage when passing a class object across a trust boundary","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F07.dcl55-cpp",{"title":1949,"path":1950,"stem":1951},"DCL56-CPP. Avoid cycles during initialization of static objects","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F08.dcl56-cpp",{"title":1953,"path":1954,"stem":1955},"DCL57-CPP. Do not let exceptions escape from destructors or deallocation functions","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F09.dcl57-cpp",{"title":1957,"path":1958,"stem":1959},"DCL58-CPP. Do not modify the standard namespaces","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl58-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F10.dcl58-cpp",{"title":1961,"path":1962,"stem":1963},"DCL59-CPP. Do not define an unnamed namespace in a header file","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl59-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F11.dcl59-cpp",{"title":1965,"path":1966,"stem":1967},"DCL60-CPP. Obey the one-definition rule","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl60-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F12.dcl60-cpp",{"title":1969,"path":1970,"stem":1971,"children":1972},"Exceptions and Error Handling (ERR)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F01.index",[1973,1974,1978,1982,1986,1990,1994,1998,2002,2006,2010,2014,2018,2022],{"title":1969,"path":1970,"stem":1971},{"title":1975,"path":1976,"stem":1977},"ERR50-CPP. Do not abruptly terminate the program","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F02.err50-cpp",{"title":1979,"path":1980,"stem":1981},"ERR51-CPP. Handle all exceptions","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F03.err51-cpp",{"title":1983,"path":1984,"stem":1985},"ERR52-CPP. Do not use setjmp() or longjmp()","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F04.err52-cpp",{"title":1987,"path":1988,"stem":1989},"ERR53-CPP. Do not reference base classes or class data members in a constructor or destructor function-try-block handler","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F05.err53-cpp",{"title":1991,"path":1992,"stem":1993},"ERR54-CPP. Catch handlers should order their parameter types from most derived to least derived","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F06.err54-cpp",{"title":1995,"path":1996,"stem":1997},"ERR55-CPP. Honor exception specifications","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F07.err55-cpp",{"title":1999,"path":2000,"stem":2001},"ERR56-CPP. Guarantee exception safety","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F08.err56-cpp",{"title":2003,"path":2004,"stem":2005},"ERR57-CPP. Do not leak resources when handling exceptions","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F09.err57-cpp",{"title":2007,"path":2008,"stem":2009},"ERR58-CPP. Handle all exceptions thrown before main() begins executing","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr58-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F10.err58-cpp",{"title":2011,"path":2012,"stem":2013},"ERR59-CPP. Do not throw an exception across execution boundaries","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr59-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F11.err59-cpp",{"title":2015,"path":2016,"stem":2017},"ERR60-CPP. Exception objects must be nothrow copy constructible","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr60-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F12.err60-cpp",{"title":2019,"path":2020,"stem":2021},"ERR61-CPP. Catch exceptions by lvalue reference","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr61-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F13.err61-cpp",{"title":2023,"path":2024,"stem":2025},"ERR62-CPP. Detect errors when converting a string to a number","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr62-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F14.err62-cpp",{"title":2027,"path":2028,"stem":2029,"children":2030},"Expressions (EXP)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F01.index",[2031,2032,2036,2038,2042,2046,2050,2054,2058,2062,2066,2070,2074,2078,2082],{"title":2027,"path":2028,"stem":2029},{"title":2033,"path":2034,"stem":2035},"EXP50-CPP. Do not depend on the order of evaluation for side effects","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F02.exp50-cpp",{"title":1642,"path":1641,"stem":2037},"5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F03.exp51-cpp",{"title":2039,"path":2040,"stem":2041},"EXP52-CPP. Do not rely on side effects in unevaluated operands","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F04.exp52-cpp",{"title":2043,"path":2044,"stem":2045},"EXP53-CPP. Do not read uninitialized memory","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F05.exp53-cpp",{"title":2047,"path":2048,"stem":2049},"EXP54-CPP. Do not access an object outside of its lifetime","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F06.exp54-cpp",{"title":2051,"path":2052,"stem":2053},"EXP55-CPP. Do not access a cv-qualified object through a cv-unqualified type","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F07.exp55-cpp",{"title":2055,"path":2056,"stem":2057},"EXP56-CPP. Do not call a function with a mismatched language linkage","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F08.exp56-cpp",{"title":2059,"path":2060,"stem":2061},"EXP57-CPP. Do not cast or delete pointers to incomplete classes","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F09.exp57-cpp",{"title":2063,"path":2064,"stem":2065},"EXP58-CPP. Pass an object of the correct type to va_start","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp58-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F10.exp58-cpp",{"title":2067,"path":2068,"stem":2069},"EXP59-CPP. Use offsetof() on valid types and members","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp59-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F11.exp59-cpp",{"title":2071,"path":2072,"stem":2073},"EXP60-CPP. Do not pass a nonstandard-layout type object across execution boundaries","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp60-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F12.exp60-cpp",{"title":2075,"path":2076,"stem":2077},"EXP61-CPP. A lambda object must not outlive any of its reference captured objects","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp61-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F13.exp61-cpp",{"title":2079,"path":2080,"stem":2081},"EXP62-CPP. Do not access the bits of an object representation that are not part of the object's value representation","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp62-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F14.exp62-cpp",{"title":2083,"path":2084,"stem":2085},"EXP63-CPP. Do not rely on the value of a moved-from object","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp63-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F15.exp63-cpp",{"title":2087,"path":2088,"stem":2089,"children":2090},"Input Output (FIO)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Finput-output-fio","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F08.input-output-fio\u002F1.index",[2091,2092,2096],{"title":2087,"path":2088,"stem":2089},{"title":2093,"path":2094,"stem":2095},"FIO50-CPP. Do not alternately input and output from a file stream without an intervening positioning call","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Finput-output-fio\u002Ffio50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F08.input-output-fio\u002F2.fio50-cpp",{"title":2097,"path":2098,"stem":2099},"FIO51-CPP. Close files when they are no longer needed","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Finput-output-fio\u002Ffio51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F08.input-output-fio\u002F3.fio51-cpp",{"title":2101,"path":2102,"stem":2103,"children":2104},"Integers (INT)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fintegers-int","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F09.integers-int\u002F1.index",[2105,2106],{"title":2101,"path":2102,"stem":2103},{"title":2107,"path":2108,"stem":2109},"INT50-CPP. Do not cast to an out-of-range enumeration value","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fintegers-int\u002Fint50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F09.integers-int\u002F2.int50-cpp",{"title":2111,"path":2112,"stem":2113,"children":2114},"Memory Management (MEM)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F1.index",[2115,2116,2120,2124,2128,2132,2136,2140,2144],{"title":2111,"path":2112,"stem":2113},{"title":2117,"path":2118,"stem":2119},"MEM50-CPP. Do not access freed memory","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F2.mem50-cpp",{"title":2121,"path":2122,"stem":2123},"MEM51-CPP. Properly deallocate dynamically allocated resources","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F3.mem51-cpp",{"title":2125,"path":2126,"stem":2127},"MEM52-CPP. Detect and handle memory allocation errors","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F4.mem52-cpp",{"title":2129,"path":2130,"stem":2131},"MEM53-CPP. Explicitly construct and destruct objects when manually managing object lifetime","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F5.mem53-cpp",{"title":2133,"path":2134,"stem":2135},"MEM54-CPP. Provide placement new with properly aligned pointers to sufficient storage capacity","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F6.mem54-cpp",{"title":2137,"path":2138,"stem":2139},"MEM55-CPP. Honor replacement dynamic storage management requirements","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F7.mem55-cpp",{"title":2141,"path":2142,"stem":2143},"MEM56-CPP. Do not store an already-owned pointer value in an unrelated smart pointer","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F8.mem56-cpp",{"title":2145,"path":2146,"stem":2147},"MEM57-CPP. Avoid using default operator new for over-aligned types","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F9.mem57-cpp",{"title":2149,"path":2150,"stem":2151,"children":2152},"Miscellaneous (MSC)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F1.index",[2153,2154,2158,2162,2166,2170],{"title":2149,"path":2150,"stem":2151},{"title":2155,"path":2156,"stem":2157},"MSC51-CPP. Ensure your random number generator is properly seeded","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Fmsc51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F2.msc51-cpp",{"title":2159,"path":2160,"stem":2161},"MSC52-CPP. Value-returning functions must return a value from all exit paths","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Fmsc52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F3.msc52-cpp",{"title":2163,"path":2164,"stem":2165},"MSC53-CPP. Do not return from a function declared [[noreturn]]","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Fmsc53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F4.msc53-cpp",{"title":2167,"path":2168,"stem":2169},"MSC54-CPP. A signal handler must be a plain old function","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Fmsc54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F5.msc54-cpp",{"title":2171,"path":2172,"stem":2173},"rand() for generating pseudorandom numbers","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Frand-for-generating-pseudorandom-numbers","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F6.rand-for-generating-pseudorandom-numbers",{"title":2175,"path":2176,"stem":2177,"children":2178},"Object Oriented Programming (OOP)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F01.index",[2179,2180,2184,2185,2186,2187,2191,2195,2199,2203],{"title":2175,"path":2176,"stem":2177},{"title":2181,"path":2182,"stem":2183},"OOP50-CPP. Do not invoke virtual functions from constructors or destructors","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F02.oop50-cpp",{"title":1736,"path":1688,"stem":1737},{"title":30,"path":1730,"stem":1732},{"title":1739,"path":1701,"stem":1740},{"title":2188,"path":2189,"stem":2190},"OOP54-CPP. Gracefully handle self-copy assignment","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F06.oop54-cpp",{"title":2192,"path":2193,"stem":2194},"OOP55-CPP. Do not use pointer-to-member operators to access nonexistent members","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F07.oop55-cpp",{"title":2196,"path":2197,"stem":2198},"OOP56-CPP. Honor replacement handler requirements","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F08.oop56-cpp",{"title":2200,"path":2201,"stem":2202},"OOP57-CPP. Prefer special member functions and overloaded operators to C Standard Library functions","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F09.oop57-cpp",{"title":2204,"path":2205,"stem":2206},"OOP58-CPP. Copy operations must not mutate the source object","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop58-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F10.oop58-cpp",{"title":2208,"path":2209,"stem":2210,"children":2211},"Back Matter","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F1.index",[2212,2213,2217,2221,2391,2405],{"title":2208,"path":2209,"stem":2210},{"title":2214,"path":2215,"stem":2216},"AA. Bibliography","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Faa-bibliography","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F2.aa-bibliography",{"title":2218,"path":2219,"stem":2220},"BB. Definitions","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F3.bb-definitions",{"title":2222,"path":2223,"stem":2224,"children":2225},"CC. Analyzers","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F01.index",[2226,2227,2229,2233,2235,2239,2241,2245,2249,2253,2257,2261,2265,2267,2271,2275,2279,2283,2287,2291,2295,2299,2303,2305,2309,2311,2315,2318,2322,2325,2329,2331,2335,2339,2343,2345,2349,2353,2357,2359,2363,2365,2369,2373,2377,2379,2383,2387],{"title":2222,"path":2223,"stem":2224},{"title":1244,"path":1243,"stem":2228},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F02.astree",{"title":2230,"path":2231,"stem":2232},"Astrée_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fastree_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F03.astree_v",{"title":1275,"path":1274,"stem":2234},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F04.axivion-bauhaus-suite",{"title":2236,"path":2237,"stem":2238},"Axivion Bauhaus Suite_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Faxivion-bauhaus-suite_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F05.axivion-bauhaus-suite_v",{"title":1301,"path":1300,"stem":2240},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F06.clang",{"title":2242,"path":2243,"stem":2244},"Clang_38_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fclang_38_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F07.clang_38_v",{"title":2246,"path":2247,"stem":2248},"Clang_39_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fclang_39_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F08.clang_39_v",{"title":2250,"path":2251,"stem":2252},"Clang_40_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fclang_40_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F09.clang_40_v",{"title":2254,"path":2255,"stem":2256},"Clang_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fclang_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F10.clang_v",{"title":2258,"path":2259,"stem":2260},"Codee","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcodee","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F11.codee",{"title":2262,"path":2263,"stem":2264},"Codee_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcodee_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F12.codee_v",{"title":1325,"path":1324,"stem":2266},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F13.codesonar",{"title":2268,"path":2269,"stem":2270},"CodeSonar_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcodesonar_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F14.codesonar_v",{"title":2272,"path":2273,"stem":2274},"Coverity","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcoverity","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F15.coverity",{"title":2276,"path":2277,"stem":2278},"Coverity_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcoverity_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F16.coverity_v",{"title":2280,"path":2281,"stem":2282},"ECLAIR","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Feclair","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F17.eclair",{"title":2284,"path":2285,"stem":2286},"ECLAIR_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Feclair_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F18.eclair_v",{"title":2288,"path":2289,"stem":2290},"EDG","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fedg","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F19.edg",{"title":2292,"path":2293,"stem":2294},"Edg_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fedg_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F20.edg_v",{"title":2296,"path":2297,"stem":2298},"GCC","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fgcc","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F21.gcc",{"title":2300,"path":2301,"stem":2302},"Gcc_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fgcc_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F22.gcc_v",{"title":1352,"path":1351,"stem":2304},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F23.helix-qac",{"title":2306,"path":2307,"stem":2308},"Helix QAC_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fhelix-qac_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F24.helix-qac_v",{"title":1380,"path":1379,"stem":2310},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F25.klocwork",{"title":2312,"path":2313,"stem":2314},"Klocwork_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fklocwork_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F26.klocwork_v",{"title":2316,"path":1409,"stem":2317},"LDRA","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F27.ldra",{"title":2319,"path":2320,"stem":2321},"Ldra_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fldra_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F28.ldra_v",{"title":2323,"path":1441,"stem":2324},"Parasoft","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F29.parasoft",{"title":2326,"path":2327,"stem":2328},"Parasoft_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fparasoft_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F30.parasoft_v",{"title":1468,"path":1467,"stem":2330},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F31.polyspace-bug-finder",{"title":2332,"path":2333,"stem":2334},"Polyspace Bug Finder_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fpolyspace-bug-finder_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F32.polyspace-bug-finder_v",{"title":2336,"path":2337,"stem":2338},"PRQA QA-C++","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fprqa-qa-cpp","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F33.prqa-qa-cpp",{"title":2340,"path":2341,"stem":2342},"PRQA QA-C++_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fprqa-qa-cpp_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F34.prqa-qa-cpp_v",{"title":1494,"path":1493,"stem":2344},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F35.pvs-studio",{"title":2346,"path":2347,"stem":2348},"PVS-Studio_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fpvs-studio_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F36.pvs-studio_v",{"title":2350,"path":2351,"stem":2352},"Rose","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Frose","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F37.rose",{"title":2354,"path":2355,"stem":2356},"Rose_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Frose_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F38.rose_v",{"title":1530,"path":1529,"stem":2358},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F39.rulechecker",{"title":2360,"path":2361,"stem":2362},"RuleChecker_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Frulechecker_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F40.rulechecker_v",{"title":1552,"path":1551,"stem":2364},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F41.security-reviewer-static-reviewer",{"title":2366,"path":2367,"stem":2368},"Security Reviewer - Static Reviewer_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsecurity-reviewer-static-reviewer_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F42.security-reviewer-static-reviewer_v",{"title":2370,"path":2371,"stem":2372},"Semgrep","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsemgrep","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F43.semgrep",{"title":2374,"path":2375,"stem":2376},"Semgrep_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsemgrep_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F44.semgrep_v",{"title":1577,"path":1576,"stem":2378},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F45.sonarqube-ccpp-plugin",{"title":2380,"path":2381,"stem":2382},"SonarQube C\u002FC++ Plugin_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsonarqube-ccpp-plugin_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F46.sonarqube-ccpp-plugin_v",{"title":2384,"path":2385,"stem":2386},"Splint","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsplint","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F47.splint",{"title":2388,"path":2389,"stem":2390},"Splint_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsplint_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F48.splint_v",{"title":2392,"path":2393,"stem":2394,"children":2395},"DD. Related Guidelines","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fdd-related-guidelines","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F5.dd-related-guidelines\u002F1.index",[2396,2397,2401],{"title":2392,"path":2393,"stem":2394},{"title":2398,"path":2399,"stem":2400},"2008","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fdd-related-guidelines\u002F2.2008","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F5.dd-related-guidelines\u002F2.2008",{"title":2402,"path":2403,"stem":2404},"MITRE CWE","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fdd-related-guidelines\u002Fmitre-cwe","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F5.dd-related-guidelines\u002F3.mitre-cwe",{"title":2406,"path":2407,"stem":2408},"EE. Risk Assessments","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fee-risk-assessments","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F6.ee-risk-assessments",{"title":2410,"path":2411,"stem":2412,"children":2413},"Admin","\u002Fsei-cert-cpp-coding-standard\u002Fadmin","5.sei-cert-cpp-coding-standard\u002F5.admin\u002F1.index",[2414,2415],{"title":2410,"path":2411,"stem":2412},{"title":2416,"path":2417,"stem":2418},"TODO List","\u002Fsei-cert-cpp-coding-standard\u002Fadmin\u002Ftodo-list","5.sei-cert-cpp-coding-standard\u002F5.admin\u002F2.todo-list",{"title":2420,"path":2421,"stem":2422},"Errata for SEI CERT C++ Coding Standard (2016 Edition)","\u002Fsei-cert-cpp-coding-standard\u002Ferrata-for-sei-cert-cpp-coding-standard-2016-edition","5.sei-cert-cpp-coding-standard\u002F6.errata-for-sei-cert-cpp-coding-standard-2016-edition",1775657784224]