将局部变量地址复制到类指针变量c ++

问题描述

我想在类的公共指针中存储一些数据。

像这样

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) 是局部变量。

所以最后一定是这样的。

class var
{
public:
    void *_;

    template <class T>
    var(T t)
    {
        _ = new T;
        memcpy(_,&t,sizeof(t));
    }
};

这很好,但问题是:

_ = new T; )这行代码使memecpy的内存空间需要更多的处理。例如 100倍

问题是:

  1. 任何人都知道比memcpy将局部变量复制到指针更快的方法
  2. 为什么要花这么多处理时间。是操作员

解决方法

您应该为您的值提供一个本地存储,并有一个指向它的公共指针,我将举一个带有联合的示例,但是您可以采用注释中建议的另一种方法:

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;

}