gpt4 book ai didi

c++ - 动态分配的正确用法是什么——应该避免这种情况吗? (在不同的范围内使用 new 和 delete)

转载 作者:行者123 更新时间:2023-11-30 02:43:08 25 4
gpt4 key购买 nike

我无法理解 new 关键字的正确用法。我的问题是:

  1. 是否像我怀疑的那样只是糟糕的设计?
  2. 如果不是,我应该在哪里调用delete
  3. 如果是这样,更好的做法是什么?
#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
}

我的直觉告诉我这很糟糕,因为 main 函数不应该管理其他函数分配的内存,因为它破坏了某种封装。我想过做一个类构造函数/解构函数,但这似乎有点过头了。

最佳答案

没有理由必须像您正在做的那样手动追逐内存。我只是在堆栈上声明你的变量,然后按值返回它。然后让 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;
}

关于c++ - 动态分配的正确用法是什么——应该避免这种情况吗? (在不同的范围内使用 new 和 delete),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26431892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com