auto_gcroot : : attachement
Attacher auto_gcroot à un objet.
auto_gcroot<_element_type> & attach(
_element_type _right
);
auto_gcroot<_element_type> & attach(
auto_gcroot<_element_type> & _right
);
template<typename _other_type>
auto_gcroot<_element_type> & attach(
auto_gcroot<_other_type> & _right
);
Paramètres
- _right
L'objet à attacher, ou un auto_gcroot contenant l'objet à attacher.
Valeur de retour
auto_gcroot en cours.
Notes
Si _right est auto_gcroot, il libère la propriété de l'objet avant l'objet qui est attaché à auto_gcrootactuel.
Exemple
// msl_auto_gcroot_attach.cpp
// compile with: /clr
#include <msclr\auto_gcroot.h>
using namespace System;
using namespace msclr;
ref class ClassA {
protected:
String^ m_s;
public:
ClassA( String^ s ) : m_s( s ) {
Console::WriteLine( "in ClassA constructor:" + m_s );
}
~ClassA() {
Console::WriteLine( "in ClassA destructor:" + m_s );
}
virtual void PrintHello() {
Console::WriteLine( "Hello from {0} A!", m_s );
}
};
ref class ClassB : ClassA {
public:
ClassB( String ^ s) : ClassA( s ) {}
virtual void PrintHello() new {
Console::WriteLine( "Hello from {0} B!", m_s );
}
};
int main() {
auto_gcroot<ClassA^> a( gcnew ClassA( "first" ) );
a->PrintHello();
a.attach( gcnew ClassA( "second" ) ); // attach same type
a->PrintHello();
ClassA^ ha = gcnew ClassA( "third" );
a.attach( ha ); // attach raw handle
a->PrintHello();
auto_gcroot<ClassB^> b( gcnew ClassB("fourth") );
b->PrintHello();
a.attach( b ); // attach derived type
a->PrintHello();
}
Configuration requise
Fichier d'en-tête <msclr\auto_gcroot.h>
Espace de noms msclr