我将尝试描述我的问题的粗略画面。实际上是更复杂,但在这里我代表了核心问题。我有这样的定义:
#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
,并确保它不会指向一些即将被解除分配的临时内存。它应该指向"永久性"存储器中。
答案 0 :(得分:2)
将reference operator(也称为地址)与const_cast
的组合使用外卖 constness :
a.userData = const_cast<void*> (static_cast<const void*> (&arg ));
static_cast
只是为了保持所有C ++ ish。
我无法想象为什么你需要这个,但它可以这样做。
编辑: 根据您实例化字符串的方式,您可能必须使用
std::string* copy = new std::string(arg);
a.userData = static_cast<void*>copy;
如果您的原始arg
未通过new
分配,则可能超出范围且无法访问。
答案 1 :(得分:0)
您只需通过
获取地址即可a.usedData = &arg;
但是... arg是临时对象(仅为此调用创建)。你确定,你不能将这个指针超出范围吗?