【问题标题】:copy local variable address to class pointer variable c++将局部变量地址复制到类指针变量c ++
【发布时间】: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 倍 慢。

问题是:

  1. 任何人都知道比 memcpy 更快地将局部变量复制到指针的方法。
  2. 为什么需要这么多处理时间。这是一个运算符

【问题讨论】:

  • 没有任何理由在 C++ 代码中使用 void *,除非在 C 库中进行接口。
  • 你似乎在尝试重塑std::any
  • 是的,我想自定义任何类。并且问题仍然比 std::any 更快
  • 你不可能打败标准库的作者。
  • stackoverflow.com/questions/64526087/…后面的问题,解释为什么不能使用memcpy。你应该使用_ = new T(t);。您还会遇到内存泄漏。

标签: c++ memory memcpy local-variables


【解决方案1】:

你应该有一个本地存储来存储你的值和一个指向它的公共指针,我将举一个联合的例子,但你可以按照 cmets 中的建议做另一种方式:

union Value {
   int i;
   float f;
   //and so on
};

class var
{
private:
    Value mPrivateValue;
public:
    void * mPublicPointer;
    var(Value val)
    {
        mPrivateValue  = val;
        mPublicPointer = &mPrivateValue;
    }
};

int main() {
    Value val = { .i = 100 }; 
    var v(val);
    std::cout << v.mPublicPointer << "\n" << ((Value *)v.mPublicPointer)->i << "\n";
    return 0;

}

【讨论】:

    猜你喜欢
    • 2014-05-14
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    相关资源
    最近更新 更多