operator new (<new>)
Funkcja Alokacja wywoływana przez nowe wyrażenie przydzielić pamięci masowej dla tablicę obiektów.
void *operator new[](
std::size_t _Count
)
throw(std::bad_alloc);
void *operator new[](
std::size_t _Count,
const std::nothrow_t&
) throw( );
void *operator new[](
std::size_t _Count,
void* _Ptr
) throw( );
Parametry
_Count
Liczba bajtów pamięci do przydzielenia dla obiektu array._Ptr
Wskaźnik, który ma być zwrócony.
Wartość zwracana
Wskaźnik do najniższego bajtowy adres magazynu nowo przydzielone.Lub_Ptr.
Uwagi
Pierwsza funkcja jest wywoływana przez new[] wyrażenie, aby przydzielić _Count bajtów magazyn odpowiednio wyrównany do reprezentowania dowolnego obiektu array o tym rozmiarze lub mniejsze.Program można zdefiniować funkcję podpisem tej funkcji, która zastępuje wersji domyślnej zdefiniowanej przez standardowa biblioteka języka C++.Wymagane zachowanie jest takie same, jak dla nowy operator(size_t).Domyślne zachowanie polega na powrót operator new(_Count).
Druga funkcja jest wywoływana przez miejsce docelowe new[] wyrażenie, aby przydzielić _Count bajtów magazyn odpowiednio dostosowane do reprezentowania dowolnego obiektu array tej wielkości.Program można zdefiniować funkcję podpisem tej funkcji, która zastępuje wersji domyślnej zdefiniowanej przez standardowa biblioteka języka C++.Domyślne zachowanie polega na powrót operatoraNowy(_Count) Jeśli ta funkcja się powiedzie. W przeciwnym wypadku zwraca pusty wskaźnik.
Trzeci funkcja jest wywoływana przez miejsce docelowe new[] wyrażenie formularza Nowy (args) TN.W tym miejscu args składa się z wskaźnikiem pojedynczego obiektu.Funkcja zwraca _Ptr.
Aby zwolnić pamięć zaalokowana przez operator new[], call usunąć operatora [.
Aby uzyskać informacje o zgłaszaniu lub nonthrowing zachowanie nowych, zobacz Nowe i usunąć Operatorzy.
Przykład
// new_op_alloc.cpp
// compile with: /EHsc
#include <new>
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass() {
cout << "Construction MyClass." << this << endl;
};
~MyClass() {
imember = 0; cout << "Destructing MyClass." << this << endl;
};
int imember;
};
int main() {
// The first form of new delete
MyClass* fPtr = new MyClass[2];
delete[ ] fPtr;
// The second form of new delete
char x[2 * sizeof( MyClass ) + sizeof(int)];
MyClass* fPtr2 = new( &x[0] ) MyClass[2];
fPtr2[1].~MyClass();
fPtr2[0].~MyClass();
cout << "The address of x[0] is : " << ( void* )&x[0] << endl;
// The third form of new delete
MyClass* fPtr3 = new( nothrow ) MyClass[2];
delete[ ] fPtr3;
}
Przykładowe dane wyjściowe
Construction MyClass.00311AEC
Construction MyClass.00311AF0
Destructing MyClass.00311AF0
Destructing MyClass.00311AEC
Construction MyClass.0012FED4
Construction MyClass.0012FED8
Destructing MyClass.0012FED8
Destructing MyClass.0012FED4
The address of x[0] is : 0012FED0
Construction MyClass.00311AEC
Construction MyClass.00311AF0
Destructing MyClass.00311AF0
Destructing MyClass.00311AEC
Wymagania
Nagłówek:<nowy>
Przestrzeń nazw: std