2015-04-07 2 views
-1

Позвольте мне перефразировать это для будущих идиотов, как я ...Правильный способ скопировать константный * экземпляр MyGreatClass

Почему это не работает? Это потому, что я забыл разыменовать указатель? Ответ оказывается «да». Игнорируйте остальную часть этого предложения, это необходимо только потому, что StackOverflow считает, что у меня слишком много кода и недостаточно подробностей. Я очень рад, заверять, пока красное окно предупреждения не уходит ... ой, там идет ...

struct MyGreatClass 
{ 
}; 

struct MyEvenBetterClass 
{ 
    const MyGreatClass* great; 

    MyEvenBetterClass(MyGreatClass* grr) 
    { 
     great = grr; 
    } 

}; 


MyGreatClass instanceOfGreatClass; 
MyEvenBetterClass instanceOfMyEvenBetterClass(&instanceOfGreatClass); 
MyGreatClass changableGreatClass(instanceOfMyEvenBetterClass.great); 
//^^this line won't work because the pointer isn't dereferenced... 
+1

Вы говорите о конструкторе копирования? Вы должны описать, для чего вам нужен этот код, поэтому будут более релевантные комментарии. – teivaz

+0

Я ... ммм ... я думаю, я говорю о конструкторе копирования. В основном мне нужно сделать заменяемую копию экземпляра класса, который абсолютно не должен изменяться. – Argh

+1

Также, возможно, будет больше безопасности, чтобы избежать использования такого большого количества указателей на C++? И вместо этого используйте ссылки? Другой подход - использовать MyGreatClass :: Clone() вместо конструктора копирования. – deeptowncitizen

ответ

1

Просто используйте неявно объявленный конструктор копирования из MyGreatClass сделать копию:

MyGreatClass changableGreatClass(*instanceOfMyEvenBetterClass.great); 
           //^dereference the pointer 
+0

(убегает от стыда ......) – Argh

+0

Ха-ха, вам нужно: P – emlai

Смежные вопросы