std::unique_ptr::unique_ptr
Da cppreference.com.
|
|
Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate.
La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui. |
<metanoindex/>
<tbody> </tbody> constexpr unique_ptr(); |
(1) | (dal C++11) |
explicit unique_ptr( pointer p ); |
(2) | (dal C++11) |
unique_ptr( pointer p, d1 ); |
(3) | (dal C++11) |
unique_ptr( pointer p, d2 ); |
(4) | (dal C++11) |
unique_ptr( unique_ptr&& u ); |
(5) | (dal C++11) |
constexpr unique_ptr( nullptr_t ); |
(6) | (dal C++11) |
template< class U, class E > unique_ptr( unique_ptr<U, E>&& u ); |
(7) | (dal C++11) |
template< class U > unique_ptr( auto_ptr<U>&& u ); |
(8) | (dal C++11) |
1)
Costruisce un
std::unique_ptr vuoto.Original:
Constructs an empty
std::unique_ptr.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
2)
Costruisce un
std::unique_ptr che possiede p, l'inizializzazione del puntatore memorizzato con p e valore-inizializzazione del memorizzato deleter.Original:
Constructs a
std::unique_ptr which owns p, initializing the stored pointer with p and value-initializing the stored deleter.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
3-4)
Costruisce un oggetto che possiede
std::unique_ptr p, l'inizializzazione del puntatore memorizzato con p e l'inizializzazione di un D deleter come di seguito (dipende dal fatto che D è un tipo di riferimento)Original:
Constructs a
std::unique_ptr object which owns p, initializing the stored pointer with p and initializing a deleter D as below (depends upon whether D is a reference type)The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
a)
Se
D non è riferimento A tipo, quindi le firme sono:Original:
If
D is non-reference type A, then the signatures are:The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
unique_ptr(pointer p, const A& d);unique_ptr(pointer p, A&& d);
b)
Se
D è un lvalue riferimento A& tipo, quindi le firme sono:Original:
If
D is an lvalue-reference type A&, then the signatures are:The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
unique_ptr(pointer p, A& d);unique_ptr(pointer p, A&& d);
c)
Se
D è un lvalue riferimento const A& tipo, quindi le firme sono:Original:
If
D is an lvalue-reference type const A&, then the signatures are:The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
unique_ptr(pointer p, const A& d);unique_ptr(pointer p, const A&& d);
5)
Costruisce un
unique_ptr trasferendo la proprietà da u a *this.Original:
Constructs a
unique_ptr by transferring ownership from u to *this.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
6)
Costruisce un
std::unique_ptr vuoto.Original:
Constructs an empty
std::unique_ptr.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
7)
Costruisce un
unique_ptr trasferendo la proprietà da u a *this, dove è costruito con un u specificato deleter (E). Dipende dal fatto E è un tipo di riferimento, come segue:Original:
Constructs a
unique_ptr by transferring ownership from u to *this, where u is constructed with a specified deleter (E). It depends upon whether E is a reference type, as following:The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
a)
E se è un tipo di riferimento, questo deleter è copia costruito da deleter u di.Original:
if
E is a reference type, this deleter is copy constructed from u's deleter.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
b)
E se non è un tipo di riferimento, questo deleter è mossa costruito da deleter u di.Original:
if
E is a non-reference type, this deleter is move constructed from u's deleter.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
8)
Costruisce un
unique_ptr in cui viene inizializzato il puntatore memorizzato con u.release() e la stored deleter è valore inizializzato.Original:
Constructs a
unique_ptr where the stored pointer is initialized with u.release() and the stored deleter is value-initialized.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Parametri
| p | - | un puntatore ad un oggetto da gestire
Original: a pointer to an object to manage The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
| d1,d2 | - | deleter una da utilizzare per distruggere l'oggetto
Original: a deleter to use to destroy the object The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
| u | - | un altro puntatore intelligente per acquistare la proprietà di
Original: another smart pointer to acquire the ownership from The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
Eccezioni
Esempio
#include <iostream>
#include <memory>
struct Foo {
Foo() { std::cout << "Foo...\n"; }
~Foo() { std::cout << "~Foo...\n\n"; }
};
struct D{
D(){};
D(const D& other){
std::cout << "call D const copy constructor... \n";
}
D(D& other){
std::cout << "call D copy constructor... \n";
}
D(D&& other){
std::cout << "call D move constructor... \n";
}
void operator () (Foo* p) const {
std::cout << "Call delete for Foo object...\n";
delete p;
};
};
int main()
{
//constructor (1)
std::cout << "Example constructor(1)...\n\n";
std::unique_ptr<Foo> up;
//constructor (2)
std::cout << "Example constructor(2)...\n";
Foo* f = new Foo();
std::unique_ptr<Foo> up2(f); //up2 now owns f
up2.reset();
//constructor (3&4)
std::cout << "Example constructor(3&4)...\n";
//D is not an lvalue-reference - d is a non-const rvalue
std::unique_ptr<Foo, D> up3(new Foo(), D()); //D must be MoveConstructible
up3.reset();
//D is not an lvalue-refernce - d is a left value
D d2;
std::unique_ptr<Foo, D> up4(new Foo(), d2); //D must be Copyconstructible
up4.reset();
//D is a left value reference type
D d3;
std::unique_ptr<Foo, D&> up5(new Foo(), d3); //up3 holds a reference to d3
up5.reset();
//D is a const left value reference type
const D d4;
std::unique_ptr<Foo, const D&> up6(new Foo(), d4);
up6.reset();
//constructor (5)
std::cout << "Example constructor(5)...\n";
std::unique_ptr<Foo> up7(new Foo());
std::unique_ptr<Foo> up8(move(up7)); //ownership is transfered to up8
up8.reset();
//constructor 6
std::cout << "Example constructor(6)...\n\n";
std::unique_ptr<Foo> up9(nullptr);
//constructor 7 - D is move constructed
D d;
std::cout << "Example constructor(7)...\n";
std::unique_ptr<Foo, D> up10(new Foo(), d); //D is not a reference
std::unique_ptr<Foo, D> up11(move(up10)); //D is move constructed
up11.reset();
//constructor 7 - D is copy constructed
std::unique_ptr<Foo, D&> up12(new Foo(), d); //D is a reference
std::unique_ptr<Foo, D> up13(move(up12)); //D is copy constructed
up13.reset();
//constructor 8
std::cout << "Example constructor(8)...\n";
std::auto_ptr<Foo> up14(new Foo());
std::unique_ptr<Foo> up15(move(up14));
up15.reset();
}