diff --git a/src/ccmain/equationdetect.cpp b/src/ccmain/equationdetect.cpp index 84cbef9d..3873858b 100644 --- a/src/ccmain/equationdetect.cpp +++ b/src/ccmain/equationdetect.cpp @@ -24,6 +24,7 @@ #include #include #include +#include // Include automatically generated configuration file if running autoconf. #ifdef HAVE_CONFIG_H @@ -168,13 +169,12 @@ void EquationDetect::IdentifySpecialText( // bottom-middle, and scaling is to make the height the x-height. const float scaling = static_cast(kBlnXHeight) / box.height(); const float x_orig = (box.left() + box.right()) / 2.0f, y_orig = box.bottom(); - TBLOB* normed_blob = new TBLOB(*tblob); + std::unique_ptr normed_blob(new TBLOB(*tblob)); normed_blob->Normalize(nullptr, nullptr, nullptr, x_orig, y_orig, scaling, scaling, 0.0f, static_cast(kBlnBaselineOffset), false, nullptr); - equ_tesseract_.AdaptiveClassifier(normed_blob, &ratings_equ); - lang_tesseract_->AdaptiveClassifier(normed_blob, &ratings_lang); - delete normed_blob; + equ_tesseract_.AdaptiveClassifier(normed_blob.get(), &ratings_equ); + lang_tesseract_->AdaptiveClassifier(normed_blob.get(), &ratings_lang); delete tblob; // Get the best choice from ratings_lang and rating_equ. As the choice in the diff --git a/src/ccmain/osdetect.cpp b/src/ccmain/osdetect.cpp index 5bbcc176..853b2fc1 100644 --- a/src/ccmain/osdetect.cpp +++ b/src/ccmain/osdetect.cpp @@ -34,6 +34,7 @@ #include "textord.h" #include +#include const int kMinCharactersToTry = 50; const int kMaxCharactersToTry = 5 * kMinCharactersToTry; @@ -348,13 +349,12 @@ bool os_detect_blob(BLOBNBOX* bbox, OrientationDetector* o, scaling = static_cast(kBlnXHeight) / box.width(); x_origin = i == 1 ? box.left() : box.right(); } - TBLOB* rotated_blob = new TBLOB(*tblob); + std::unique_ptr rotated_blob(new TBLOB(*tblob)); rotated_blob->Normalize(nullptr, ¤t_rotation, nullptr, x_origin, y_origin, scaling, scaling, 0.0f, static_cast(kBlnBaselineOffset), false, nullptr); - tess->AdaptiveClassifier(rotated_blob, ratings + i); - delete rotated_blob; + tess->AdaptiveClassifier(rotated_blob.get(), ratings + i); current_rotation.rotate(rotation90); } delete tblob; diff --git a/src/ccmain/paramsd.cpp b/src/ccmain/paramsd.cpp index 8424c486..2d8037f8 100644 --- a/src/ccmain/paramsd.cpp +++ b/src/ccmain/paramsd.cpp @@ -26,6 +26,7 @@ #endif #include +#include // Include automatically generated configuration file if running autoconf. #ifdef HAVE_CONFIG_H @@ -171,14 +172,13 @@ void ParamContent::SetValue(const char* val) { void ParamsEditor::GetPrefixes(const char* s, STRING* level_one, STRING* level_two, STRING* level_three) { - char* p = new char[1024]; - GetFirstWords(s, 1, p); - *level_one = p; - GetFirstWords(s, 2, p); - *level_two = p; - GetFirstWords(s, 3, p); - *level_three = p; - delete[] p; + std::unique_ptr p(new char[1024]); + GetFirstWords(s, 1, p.get()); + *level_one = p.get(); + GetFirstWords(s, 2, p.get()); + *level_two = p.get(); + GetFirstWords(s, 3, p.get()); + *level_three = p.get(); } // Compare two VC objects by their name. diff --git a/src/cutil/callcpp.cpp b/src/cutil/callcpp.cpp index 1d478075..6f486afe 100644 --- a/src/cutil/callcpp.cpp +++ b/src/cutil/callcpp.cpp @@ -36,6 +36,8 @@ #include "host.h" #include "unichar.h" +#include + void cprintf ( //Trace printf const char *format, ... //special message @@ -109,16 +111,14 @@ void c_clear_window( /*move pen */ char window_wait(ScrollView* win) { - SVEvent* ev; // Wait till an input or click event (all others are thrown away) char ret = '\0'; SVEventType ev_type = SVET_ANY; do { - ev = win->AwaitEvent(SVET_ANY); + std::unique_ptr ev(win->AwaitEvent(SVET_ANY)); ev_type = ev->type; if (ev_type == SVET_INPUT) ret = ev->parameter[0]; - delete ev; } while (ev_type != SVET_INPUT && ev_type != SVET_CLICK); return ret; } diff --git a/src/dict/dawg.cpp b/src/dict/dawg.cpp index ebb3ac5b..b557ecea 100644 --- a/src/dict/dawg.cpp +++ b/src/dict/dawg.cpp @@ -36,6 +36,8 @@ #include "tesscallback.h" #include "tprintf.h" +#include + /*---------------------------------------------------------------------- F u n c t i o n s f o r D a w g ----------------------------------------------------------------------*/ @@ -112,11 +114,10 @@ void CallWithUTF8(TessCallback1 *cb, const WERD_CHOICE *wc) { void Dawg::iterate_words(const UNICHARSET &unicharset, TessCallback1 *cb) const { - TessCallback1 *shim = - NewPermanentTessCallback(CallWithUTF8, cb); + std::unique_ptr> shim( + NewPermanentTessCallback(CallWithUTF8, cb)); WERD_CHOICE word(&unicharset); - iterate_words_rec(word, 0, shim); - delete shim; + iterate_words_rec(word, 0, shim.get()); } void Dawg::iterate_words_rec(const WERD_CHOICE &word_so_far, diff --git a/src/textord/edgblob.cpp b/src/textord/edgblob.cpp index 57bb56f8..9f68b08d 100644 --- a/src/textord/edgblob.cpp +++ b/src/textord/edgblob.cpp @@ -71,7 +71,7 @@ ICOORD tright): bl(bleft), tr(tright) { bxdim =(tright.x() - bleft.x()) / BUCKETSIZE + 1; bydim =(tright.y() - bleft.y()) / BUCKETSIZE + 1; // make array - buckets = new C_OUTLINE_LIST[bxdim * bydim]; + buckets.reset(new C_OUTLINE_LIST[bxdim * bydim]); index = 0; } diff --git a/src/textord/edgblob.h b/src/textord/edgblob.h index b85505c1..e82f5194 100644 --- a/src/textord/edgblob.h +++ b/src/textord/edgblob.h @@ -26,6 +26,8 @@ #include "coutln.h" #include "crakedge.h" +#include + #define BUCKETSIZE 16 class OL_BUCKETS @@ -35,9 +37,8 @@ class OL_BUCKETS ICOORD bleft, //corners ICOORD tright); - ~OL_BUCKETS () { //cleanup - delete[]buckets; - } + ~OL_BUCKETS () = default; + C_OUTLINE_LIST *operator () (//array access int16_t x, //image coords int16_t y); @@ -64,7 +65,7 @@ class OL_BUCKETS C_OUTLINE_IT *it); //destination iterator private: - C_OUTLINE_LIST * buckets; //array of buckets + std::unique_ptr buckets; //array of buckets int16_t bxdim; //size of array int16_t bydim; ICOORD bl; //corners diff --git a/src/textord/scanedg.cpp b/src/textord/scanedg.cpp index 5760263b..bae64415 100644 --- a/src/textord/scanedg.cpp +++ b/src/textord/scanedg.cpp @@ -46,7 +46,7 @@ void block_edges(Pix *t_pix, // thresholded image int height = pixGetHeight(t_pix); int wpl = pixGetWpl(t_pix); // lines in progress - CRACKEDGE **ptrline = new CRACKEDGE*[width + 1]; + std::unique_ptr ptrline(new CRACKEDGE*[width + 1]); CRACKEDGE *free_cracks = nullptr; block->bounding_box(bleft, tright); // block box @@ -54,7 +54,7 @@ void block_edges(Pix *t_pix, // thresholded image for (int x = block_width; x >= 0; x--) ptrline[x] = nullptr; // no lines in progress - uint8_t* bwline = new uint8_t[width]; + std::unique_ptr bwline(new uint8_t[width]); uint8_t margin = WHITE_PIX; @@ -65,17 +65,15 @@ void block_edges(Pix *t_pix, // thresholded image for (int x = 0; x < block_width; ++x) { bwline[x] = GET_DATA_BIT(line, x + bleft.x()) ^ 1; } - make_margins(block, &line_it, bwline, margin, bleft.x(), tright.x(), y); + make_margins(block, &line_it, bwline.get(), margin, bleft.x(), tright.x(), y); } else { - memset(bwline, margin, block_width * sizeof(bwline[0])); + memset(bwline.get(), margin, block_width * sizeof(bwline[0])); } line_edges(bleft.x(), y, block_width, - margin, bwline, ptrline, &free_cracks, outline_it); + margin, bwline.get(), ptrline.get(), &free_cracks, outline_it); } free_crackedges(free_cracks); // really free them - delete[] ptrline; - delete[] bwline; } @@ -94,14 +92,13 @@ void make_margins( //get a line int16_t right, int16_t y //line coord ) { - PB_LINE_IT *lines; ICOORDELT_IT seg_it; int32_t start; //of segment int16_t xext; //of segment int xindex; //index to pixel if (block->poly_block () != nullptr) { - lines = new PB_LINE_IT (block->poly_block ()); + std::unique_ptr lines(new PB_LINE_IT (block->poly_block ())); const std::unique_ptr segments( lines->get_line(y)); if (!segments->empty ()) { @@ -124,7 +121,6 @@ void make_margins( //get a line for (xindex = left; xindex < right; xindex++) pixels[xindex - left] = margin; } - delete lines; } else { start = line_it->get_line (y, xext); diff --git a/src/textord/topitch.cpp b/src/textord/topitch.cpp index 6a3449ab..af264679 100644 --- a/src/textord/topitch.cpp +++ b/src/textord/topitch.cpp @@ -37,6 +37,8 @@ #include "config_auto.h" #endif +#include + #define EXTERN EXTERN BOOL_VAR (textord_all_prop, FALSE, "All doc is proportial text"); @@ -1275,7 +1277,6 @@ float tune_row_pitch2( //find fp cells int16_t end; //of good range int32_t best_count; //lowest sum float best_sd; //best result - STATS *sum_proj; //summed projection best_sp_sd = initial_pitch; @@ -1283,7 +1284,7 @@ float tune_row_pitch2( //find fp cells if (textord_disable_pitch_test || best_pitch <= textord_pitch_range) { return initial_pitch; } - sum_proj = new STATS[textord_pitch_range * 2 + 1]; + std::unique_ptr sum_proj(new STATS[textord_pitch_range * 2 + 1]); //summed projection for (pitch_delta = -textord_pitch_range; pitch_delta <= textord_pitch_range; pitch_delta++) @@ -1356,8 +1357,6 @@ float tune_row_pitch2( //find fp cells space_size, initial_pitch); - delete[]sum_proj; - return best_sd; } diff --git a/src/textord/tospace.cpp b/src/textord/tospace.cpp index cb266f88..aa0a6cdd 100644 --- a/src/textord/tospace.cpp +++ b/src/textord/tospace.cpp @@ -37,6 +37,7 @@ #endif #include +#include #define MAXSPACING 128 /*max expected spacing in pix */ @@ -62,9 +63,9 @@ void Textord::to_spacing( for (block_it.mark_cycle_pt (); !block_it.cycled_list (); block_it.forward ()) { block = block_it.data (); - gapmap = new GAPMAP (block); + std::unique_ptr gapmap(new GAPMAP (block)); //map of big vert gaps in blk block_spacing_stats(block, - gapmap, + gapmap.get(), old_text_ord_proportional, block_space_gap_width, block_non_space_gap_width); @@ -89,7 +90,7 @@ void Textord::to_spacing( tprintf ("Block %d Row %d: Now Proportional\n", block_index, row_index); row_spacing_stats(row, - gapmap, + gapmap.get(), block_index, row_index, block_space_gap_width, @@ -108,7 +109,6 @@ void Textord::to_spacing( #endif row_index++; } - delete gapmap; block_index++; } } diff --git a/src/viewer/svutil.cpp b/src/viewer/svutil.cpp index 6dfc3cfb..8e3aba79 100644 --- a/src/viewer/svutil.cpp +++ b/src/viewer/svutil.cpp @@ -50,6 +50,7 @@ struct addrinfo { #include #include #include +#include #include // Include automatically generated configuration file if running autoconf. @@ -147,7 +148,7 @@ void SVSync::StartProcess(const char* executable, const char* args) { ++argc; } } - char** argv = new char*[argc + 2]; + std::unique_ptr argv(new char*[argc + 2]); argv[0] = strdup(executable); argv[1] = mutable_args; argc = 2; @@ -162,10 +163,9 @@ void SVSync::StartProcess(const char* executable, const char* args) { } } argv[argc] = nullptr; - execvp(executable, argv); + execvp(executable, argv.get()); free(argv[0]); free(argv[1]); - delete[] argv; } #endif } @@ -311,12 +311,11 @@ static std::string ScrollViewCommand(std::string scrollview_path) { "-Xms1024m -Xmx2048m -jar %s/ScrollView.jar" " & wait\""; #endif - int cmdlen = strlen(cmd_template) + 4*strlen(scrollview_path.c_str()) + 1; - char* cmd = new char[cmdlen]; + size_t cmdlen = strlen(cmd_template) + 4 * strlen(scrollview_path.c_str()) + 1; + std::unique_ptr cmd(new char[cmdlen]); const char* sv_path = scrollview_path.c_str(); - snprintf(cmd, cmdlen, cmd_template, sv_path, sv_path, sv_path, sv_path); - std::string command(cmd); - delete [] cmd; + snprintf(cmd.get(), cmdlen, cmd_template, sv_path, sv_path, sv_path, sv_path); + std::string command(cmd.get()); return command; } diff --git a/src/wordrec/wordrec.cpp b/src/wordrec/wordrec.cpp index 03beedc0..7163a759 100644 --- a/src/wordrec/wordrec.cpp +++ b/src/wordrec/wordrec.cpp @@ -115,13 +115,9 @@ Wordrec::Wordrec() : " and segmentation search", params()) { prev_word_best_choice_ = nullptr; - language_model_ = new LanguageModel(&get_fontinfo_table(), - &(getDict())); + language_model_.reset(new LanguageModel(&get_fontinfo_table(), + &(getDict()))); fill_lattice_ = nullptr; } -Wordrec::~Wordrec() { - delete language_model_; -} - } // namespace tesseract diff --git a/src/wordrec/wordrec.h b/src/wordrec/wordrec.h index 7c79defa..1ae79ff2 100644 --- a/src/wordrec/wordrec.h +++ b/src/wordrec/wordrec.h @@ -30,6 +30,8 @@ #include "findseam.h" #include "callcpp.h" +#include + class WERD_RES; namespace tesseract { @@ -179,7 +181,7 @@ class Wordrec : public Classify { // methods from wordrec/*.cpp *********************************************** Wordrec(); - virtual ~Wordrec(); + virtual ~Wordrec() = default; // Fills word->alt_choices with alternative paths found during // chopping/segmentation search that are kept in best_choices. @@ -404,7 +406,7 @@ class Wordrec : public Classify { // Member variables. - LanguageModel *language_model_; + std::unique_ptr language_model_; PRIORITY pass2_ok_split; // Stores the best choice for the previous word in the paragraph. // This variable is modified by PAGE_RES_IT when iterating over