2015-04-07 48 views
-1

實例讓我重複這對於像我這樣的傻瓜未來...正確的方式來複制一個const *的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