C++ (Qt)explicit CScopedRef( TRef * ref )
Some obj = 10;
C++ (Qt)Some obj;obj = 10; // вызывается оператор присваивания ..Some obj2 = 10; // вызывается конструктор (но не оператор присваивания)
C++ (Qt)#include <iostream>#include <memory> void deleter(int *) { std::cout << "user deleter" << std::endl;} typedef void (*func_t)(int *); int main(){ std::unique_ptr<int, func_t> p(new int(10), deleter); return 0;}
C++ (Qt)template <class Ref, class Deleter>void TestProc( Ref * ref, Deleter del ){ del(ref);} void MyDel ( int * a ) { printf("%d\n", *a); }int MyDel2 ( int * a ) { return *a + 1; } int main( void ){ int a = 5; TestProc(&a, MyDel); TestProc(&a, MyDel2); return 0;}
C++ (Qt) TestProc(&a, MyDel); TestProc(&a, MyDel2);
Some obj = 10; //гарантированно запустится конструктор с параметром
struct Test{ Test(const Test& src) { cout<<"copy\n"; } Test(int src) { cout<<"ctor with param\n"; }};int main(){ Test t =10; //вывод в консоль: ctor with param}
//debug:gccstruct Test{ Test(int src) { cout<<"ctor with param\n"; }private: Test(const Test& src) { cout<<"copy\n"; }};int main(){ Test t =10; //Line 8: error: 'Test::Test(const Test&)' is private}
//debug:mvsstruct Test{ Test(const Test& src) { cout<<"copy\n"; }private: Test(int src) { cout<<"ctor with param\n"; } //<--- запрещен};int main(){ Test t =10; //успешная компиляция //вывод в консоль: ctor with param}
std::unique_ptr<int, func_t> p(new int(10), deleter);
C++ (Qt)#include <stdio.h> struct CTest { CTest( int a ) : mA(a) { printf("def ctor\n"); } CTest( const CTest & src ) { printf("copy ctor\n"); mA = src.mA; } int mA; }; int main( void ){ CTest test = 5; return 0;}