假设我有一个班级“ClassA”。是否可以将该类的另一个实例的指针分配给非指针变量?例如
ClassA pineapple();
ClassA* replacementPineapple = new ClassA();
pineapple.refersto = replacementPineapple; <- something like that
我问的原因是因为我有一个类,我需要将很多类变量移动到物理上位于内存映射文件中。我当然可以将它们作为指针并在每次我需要使用它们时取消引用它们但是这很多解除引用以及所有括号和其他内容只会使代码真的难以阅读。如果有任何方法我会接受它。
答案 0 :(得分:0)
是的。您可以分配内存,然后手动复制(从现有对象)。或者您使用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
仍会引用它最初指向的对象,并且你无法使它跟随