union可以包含帶有建構函式的物件不?

2021-04-15 08:14:51 字數 965 閱讀 1985

今天在borland新聞組上看到這個問題,因為uion的所有成員都共享同樣的記憶體,所以union中不能帶有建構函式的物件。如下這個union:

union ;

這三個物件都是帶有建構函式的,如果這三個物件都呼叫各自的建構函式,它們將互相干擾對方的資料。

原貼作者定義了三個結構和乙個聯合來表示不同的訊息:

typedef struct

tstr_blocked_item, *p_tstr_blocked_item;

typedef struct

tstr_basic_event, *p_tstr_basic_event;

typedef struct

tstr_broadcase_event, *p_tstr_broadcase_event;

typedef struct

;} tstr_event_data; //用乙個union表示三個不同的訊息

編譯器抱怨uion中不包含帶有建構函式的物件。

後來jason cipriani回貼,給了兩種解決方案:

(1):用乙個結構體表示所有的訊息

enum eventtype ;

struct tstr_event_data ;

void writeeventtofile (const tstr_event_data *data)

}(2)用類繼承來表示不同的訊息

struct tstr_event_data ;

struct tstr_blocked_item : public tstr_event_data

};struct tstr_basic_event : public tstr_event_data

};struct tstr_broadcase_event : public tstr_event_data

};void writealleventstofile (const vector&events)

整數類 包含拷貝建構函式

描述 定義乙個整數類,該類有乙個int型別的資料成員,該類支援整數的加,減,乘 除運算 整數類的4個操作,即整數類的成員函式 除此之外,定義建構函式和拷貝建構函式。編寫主函式進行測試 輸入乙個整數 輸出呼叫拷貝建構函式生成乙個新物件。新物件的值是原來物件的3倍。計算並輸出這兩個物件和差 乘積樣例輸入...

建構函式可以為虛函式嗎?

答案當然是否定的,主要從一下兩個角度加以說明。從儲存空間角度 虛函式對應乙個vtable,可是這個vtable其實是儲存在物件的記憶體空間的。那麼問題來了,如果建構函式是虛函式,就要通過vtable來呼叫,可是物件空間還沒有例項化,也就是記憶體空間還沒有,無法找到vtable,所以建構函式不能是虛函...

union中的成員不能有建構函式

最近在做專案的cta測試,快被折騰死了。專案中用到的開源庫alljoyn在編譯時報錯 in file included from target base alljoyn inc alljoyn message.h 36 0 from target base alljoyn inc alljoyn a...