gpt4 book ai didi

c++ - 从方法范围复制 char*

转载 作者:行者123 更新时间:2023-11-28 02:14:47 25 4
gpt4 key购买 nike

我正在尝试找出一种安全的方法,让 char* 字符串存在于声明原始变量的方法之外。

例如:

void SomeFunc(someclass* c)
{
char* stringA = "hello";
c->stringB = stringA;
}

一切都很好,但是当函数返回时,存储 stringA 的内存被破坏,stringB 现在指向一些随机的内存。

有什么安全的方法可以管理从 stringA 中保留字符串的拷贝而不在 stringB 中销毁它?或者我应该只分配新内存并稍后删除它?

最佳答案

由于您使用的是char,因此最简单和最好的方法是使用std::string。 ! std::string 将处理复制本地对象并允许您在函数外使用它:

std::string CreateWord()
{
return "hello";
}

int main()
{
const auto word = CreateWord(); // create the word
std::cout << word << std::endl; // print the word to console
}

因为 std::stringchar 的方便包装容器,所以在您的示例中使用它更有意义;但是,如果您使用某种用户定义的对象,则需要在堆上而不是堆栈上分配内存。您可以/应该使用 std::unique_ptr而不是用于此目的的原始指针:std::unique_ptr 允许您安全地分配和转移内存的所有权,并且在可读性方面更有意义:

std::unique_ptr<UserObject> CreateObj()
{
return std::make_unique<UserObject>();
}

int main()
{
auto obj = CreateObj();
// Use UserObject...
}

CreateObj() 将分配内存来存储单词,然后返回指向该内存的指针。

关于c++ - 从方法范围复制 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34347819/

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