【发布时间】:2020-10-25 16:17:05
【问题描述】:
我想在类的公共指针中存储一些数据。
像这样
class var
{
public:
void *_;
template <class T>
var(T &t)
{
_ = &t;
}
};
它工作正常。但是如果在这里调用这是问题
int main()
{
int i = 1;
var test = i;
i++;
cout << *(int *)test._;
}
我想成为 1 却是 2
所以我需要获取参数的副本,然后如果输入变量改变了我的数据不会改变。
喜欢这个
class var
{
public:
void *_;
template <class T>
var(T t)
{
_ = &t;
}
};
所以它不起作用因为 var(T t) 是一个局部变量。
所以finally一定是这样的。
class var
{
public:
void *_;
template <class T>
var(T t)
{
_ = new T;
memcpy(_, &t, sizeof(t));
}
};
这很好,但问题是:
( _ = new T; ) 这一行是为了让 memecpy 的内存空间占用更多的进程。像 100 倍 慢。
问题是:
- 任何人都知道比 memcpy 更快地将局部变量复制到指针的方法。
- 为什么需要这么多处理时间。这是一个运算符
【问题讨论】:
-
没有任何理由在 C++ 代码中使用
void *,除非在 C 库中进行接口。 -
你似乎在尝试重塑
std::any -
是的,我想自定义任何类。并且问题仍然比 std::any 更快
-
你不可能打败标准库的作者。
-
看stackoverflow.com/questions/64526087/…后面的问题,解释为什么不能使用memcpy。你应该使用
_ = new T(t);。您还会遇到内存泄漏。
标签: c++ memory memcpy local-variables