Commit fbd79df66bde4f070ff488d8716870667736600f

Authored by Jarryd Beck
1 parent 6bb1e82b

Fixes #336

Memory leak was caused by `exit`.
Showing 1 changed file with 14 additions and 8 deletions
src/example.cpp
@@ -21,17 +21,18 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN @@ -21,17 +21,18 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 THE SOFTWARE. 21 THE SOFTWARE.
22 22
23 */ 23 */
  24 +#include "cxxopts.hpp"
24 25
25 #include <iostream> 26 #include <iostream>
  27 +#include <memory>
26 28
27 -#include "cxxopts.hpp"  
28 -  
29 -void 29 +int
30 parse(int argc, const char* argv[]) 30 parse(int argc, const char* argv[])
31 { 31 {
32 try 32 try
33 { 33 {
34 - cxxopts::Options options(argv[0], " - example command line options"); 34 + std::unique_ptr<cxxopts::Options> allocated(new cxxopts::Options(argv[0], " - example command line options"));
  35 + auto& options = *allocated;
35 options 36 options
36 .positional_help("[optional args]") 37 .positional_help("[optional args]")
37 .show_positional_help(); 38 .show_positional_help();
@@ -82,7 +83,7 @@ parse(int argc, const char* argv[]) @@ -82,7 +83,7 @@ parse(int argc, const char* argv[])
82 if (result.count("help")) 83 if (result.count("help"))
83 { 84 {
84 std::cout << options.help({"", "Group"}) << std::endl; 85 std::cout << options.help({"", "Group"}) << std::endl;
85 - exit(0); 86 + return true;
86 } 87 }
87 88
88 if(result.count("list")) 89 if(result.count("list"))
@@ -98,7 +99,7 @@ parse(int argc, const char* argv[]) @@ -98,7 +99,7 @@ parse(int argc, const char* argv[])
98 { 99 {
99 std::cout << result.arguments_string() << std::endl; 100 std::cout << result.arguments_string() << std::endl;
100 } 101 }
101 - exit(0); 102 + return true;
102 } 103 }
103 104
104 if (apple) 105 if (apple)
@@ -184,13 +185,18 @@ parse(int argc, const char* argv[]) @@ -184,13 +185,18 @@ parse(int argc, const char* argv[])
184 catch (const cxxopts::OptionException& e) 185 catch (const cxxopts::OptionException& e)
185 { 186 {
186 std::cout << "error parsing options: " << e.what() << std::endl; 187 std::cout << "error parsing options: " << e.what() << std::endl;
187 - exit(1); 188 + return false;
188 } 189 }
  190 +
  191 + return true;
189 } 192 }
190 193
191 int main(int argc, const char* argv[]) 194 int main(int argc, const char* argv[])
192 { 195 {
193 - parse(argc, argv); 196 + if (!parse(argc, argv))
  197 + {
  198 + return 1;
  199 + }
194 200
195 return 0; 201 return 0;
196 } 202 }