是否可以为类变量分配内存位置?

时间:2014-07-07 09:03:05

标签: c++

假设我有一个班级“ClassA”。是否可以将该类的另一个实例的指针分配给非指针变量?例如

ClassA pineapple();
ClassA* replacementPineapple = new ClassA();
pineapple.refersto = replacementPineapple; <- something like that

我问的原因是因为我有一个类,我需要将很多类变量移动到物理上位于内存映射文件中。我当然可以将它们作为指针并在每次我需要使用它们时取消引用它们但是这很多解除引用以及所有括号和其他内容只会使代码真的难以阅读。如果有任何方法我会接受它。

3 个答案:

答案 0 :(得分:0)

是的。您可以分配内存,然后手动复制(从现有对象)。或者您使用placement new运算符在给定位置分配/构建。

请参阅:using placement new

答案 1 :(得分:0)

  

我需要将很多类变量移动到物理上位于内存映射文件中。我当然可以将它们作为指针并在每次我需要使用它们时取消引用它们但是这很多解除引用以及所有括号和其他内容只会使代码真的难以阅读。如果有任何方法我会接受它。

class ClassA
{
  public:
    ClassA(int* p_a, double* p_d) : a_(*p_a), d_(*p_d) { }

    int& a_;
    double& d_;
};

然后你可以创建一个像这样的实例:

ClassA my_a(ptr_to_a_in_shmem, ptr_to_d_in_shmem);

编写在a_d_上运行的代码(成员函数或其他函数),从而访问/修改共享内存。

答案 2 :(得分:0)

如果我正确理解您的问题,您只想使用pineapple作为*replacementPineapple的别名。您可以先创建后者,然后将pineapple定义为引用类型(由&标记)

ClassA* replacementPineapple = new ClassA();
ClassA& pineapple = *replacementPineapple;

现在,对pineapple成员的每次(读取或写入)访问都将实际访问*replacementPineapple的相应成员。只有当你应该在某个时候将指针replacementPineapple修改为指向其他地方(或变为空)时,pineapple仍会引用它最初指向的对象,并且你无法使它跟随