우리는 기본 클래스 A를 가지고 있습니다. 에서 파생 된 클래스 B 이제 클래스 B는 배치 new 연산자를 사용하여 할당됩니다. 클래스 내부 내 코드의 일환으로, 내가 추가 한 클래스 C는배치 new - 생성자 내부 생성자
이제 새로운 배치는 클래스 B의 내부이라고는 sizeof 클래스 B의의 malloc을 사용하고 계정 클래스 C. 클래스 C 생성자 고려하지 않습니다 건설자. (내 용의자 야)
나는 그것이 정확한지 알고 싶다. 또는 게재 위치 새 할당에서 클래스 C의 크기를 추가합니까? 메모리를 추가하면 클래스 C의 생성자를 어떻게 호출할까요? 메모리를 다시 할당할까요? 오히려 힙에서 할당하는 것보다 공급 된 주소를 사용하는 것을 제외하고
card.h {
class Card
{
private:
char hwModel; // HW/FW model and rev are stored in the
// database to detect change of card type
char hwRev;
char serialNum[EM_CARD_SERIAL_NUM_SIZE];
char fwModel;
char fwRev;
>>>>
public:
class IssuResource *ptrIssuResrc;
void *operator new(size_t size, void *objP) {size = size; return objP;};
// overload the new operator
void operator delete(void *objP) { objP = objP;};
// overload the delete operator
Card();
}
chopperCard.cpp
// Allocate Memory and Create Card Object
/* sa_ignore */
buf = (UINT32 *)malloc(sizeof(CardChop));
if (buf == NULL) {
emLogError(EM_INTERNAL_ERROR, __FUNCTION__,
"exit: failed to allocate %d bytes for card object\n",
sizeof(CardChop)
);
exit(1);
}
/* sa_ignore */
card = new (buf) CardChop(spa_issu_restart); --> placement new
}
Constructor for choppercard:
{
CardChop::CardChop (boolean is_issu_set) : Card()
{
issu_inprogress = is_issu_set;
if (is_issu_set) {
ISSUTRACE(4,"Issu state is SET\n");
dev_np37xx_update_issu_state(is_issu_set);
dev_set_issu_state(is_issu_set);
dev_dm_issu_state(is_issu_set);
dev_tigris_issu_state(is_issu_set);
dev_evros_issu_state(is_issu_set);
dev_evros1_issu_state(is_issu_set);
>>>
vtwin->fvt->set_gp_stat(vtwin, VTWIN_GP_STAT_APP_TRACE1,
CHOP_BG_INIT_FAIL);
// init Bourget device
initDevice((dev_object_t *)bourget);
vtwin->fvt->set_gp_stat(vtwin, VTWIN_GP_STAT_APP_TRACE1, CHOP_BG_INIT_AFTER);
ptrIssuResrc = new IssuResource();
}
일부 코드를 알려주십시오. –
귀하의 질문에 엉망입니다, 일반 "배치 새로운"아무것도 할당하지 않으며, 사용자 정의 것들은 원격으로 볼 수 없습니다 –
"클래스 C 안에 클래스를 추가했습니다": 회원 또는 중첩 클래스로? –