我无法理解new
关键字的正确用法。我的问题是:
delete
? #include <string>
#include <iostream>
struct myOptions {
int myInt;
std::string myString;
};
myOptions* packageOptions() {
myOptions* options = new myOptions;
options->myInt = 42;
options->myString = "hello world";
return options;
}
int main() {
myOptions* options = packageOptions();
std::cout << options->myString << std::endl;
std::cout << options->myInt << std::endl;
delete myOptions; // this just feels wrong to put here
}
我的直觉告诉我这很不好,因为主要功能不必管理其他功能分配的内存,因为它破坏了某种封装。我考虑过要做一个类的构造函数/解构函数,但这似乎太过分了。
最佳答案
没有必要在执行操作时手动地追逐内存。我只是在堆栈上声明您的变量,然后按值返回它。然后,当变量超出范围时,让RAII为您清理内存。
myOptions packageOptions() {
myOptions options;
options.myInt = 42;
options.myString = "hello world";
return options;
}
int main() {
myOptions options = packageOptions();
std::cout << options.myString << std::endl;
std::cout << options.myInt << std::endl;
}