gpt4 book ai didi

c++ - 如何正确设置 void* userData 字段?

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

我将尝试描述我的问题的大致情况。其实是比较复杂的,但是这里我代表了核心问题。我有这样的定义:

#define MY_STRING "my_string"

并且有一个函数将参数和参数作为const std::string& arg,如下所示:

void f(const std::string& arg)
{
A a;
a.userData = // how to assign the `arg` to `userData` filed if its type is `void*`
// also consider that it cares the pointer, and the memory should not be deallocated
}

然后我调用 f 并传递 MY_STRING,它应该在将来用作已用数据:

f(MY_STRING);

现在我需要将 arg 分配给 void* userData 并确保它没有指向某个将被删除的临时内存-很快分配。它应该指向“永久”内存。

最佳答案

使用 reference operator (又名 address-of)与 const_cast 的组合可以带走 constness:

a.userData = const_cast<void*> (static_cast<const void*> (&arg ));

static_cast 只是为了保持所有 C++ 风格。

我无法想象你为什么需要这个,但它可以那样做。

编辑:根据您如何实例化字符串,您可能必须使用

std::string* copy = new std::string(arg);
a.userData = static_cast<void*>copy;

如果您的原始 arg 不是通过 new 分配的,它可能会超出范围并且无法访问。

关于c++ - 如何正确设置 void* userData 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25929517/

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