- kullanıcı kontrollü bellek havuzundan bir nesnenin örneğini (C++ 98 belki?)
- Dinamik şeyleri kullanarak sistem havuzundan bellek ayrılamıyor yeni gibi, malloc
- Ancak, yerleşik OS çağrıları, tarafımdan tanımlanan bir yığın dizisinden malloc'a kullanabilirim.
ayırma ve ben kullanıyorum C++ derleyicisi daha eski bir sürümü
class cBaseClass /* pure abstract */
{
public:
virtual void ifFunc(void) = 0;
virtual ~cBaseClass() = 0;
}
inline cBaseClass::~cBaseClass()
{
}
class cDclass:cBaseClass
{
public:
cDclass();
~cDclass();
void ifFunc(void); /* implement the pure virtual */
}
cDclass::cDclass(void)
{
printf("[0x%X] derived constructor called\n", this);
}
cDclass::~cDclass(void)
{
printf("[0x%X] derived destructor called\n", this);
}
void cDclass::ifFunc(void)
{
printf("[0x%X] ifFunc called from derived class\n", this);
}
uchar_t myHeap[4096];
int main (void)
{
cDclass* pMyPtr = NULL;
uint32_t i = 0;
(void) memset(myHeap, 0, sizeof(myHeap)/sizeof(myHeap[0]);
for(i = 0; i < 20; i++)
{
pMyPtr = myHeap[i * sizeof(cDclass) + 4];
*pMyPtr = cDclass();
pMyPtr->ifFunc(); /* Crash */
}
}
aşağıdakileri yapın girince ne görüyorum türetilmiş sınıfının yapıcı onun yıkıcı çağrılan called..then olur olduğunu bazı garip davranışları (program çöker) içine çalıştırıyorum
ve sonra bir çarpışma. * pMyPtr = cDclass() öğesinin bir sınıf oluşturduğuna ve daha sonra pMyPtr tarafından belirtilen adreste bu sınıfın bir kopyasını oluşturduğuna inanıyorum? Bunu söylüyorum çünkü pMyPtr = cDClass() 'u kaldırdığımda ve cDclass örneğini depolamak için bir taklit değişken oluşturup artık kilitlenmeyen memeliyi kullanın.
Yerleşim yeni kullanmak için '' eklemeniz gerektiğinden emin değilim. –
@DavidHaim '', Standard'ın operatörün yeni değerini (size_t, void *) 'belirttiği tek yerdir.Ve g ++ ve clang ++, herhangi bir başlık eklemeden kullanmaya çalışırsanız şikayet eder. –
aschepler