C++学习笔记

    技术2022-05-20  40

    11/4/16-01:

    如果你想禁止某些东西,就应该把完成它的操作定义为一个私用的成员函数。(the design and evolution of cpp)

    如1)只要将析构函数声明为私用就可以避免堆栈和全局分配,这样做还能防止随便使用delete:

    class sample{ ~sample(); // private destructor public: static void free(sample* p) { delete p; } }; sample global; // error: private destructor void f() { sample loc; // error sample* p = new sample; // fine ... delete p; // error sample::free(p); // fine }

     

    2)声明一个不大寻常的operator new(), 只允许全局和堆栈变量,禁止自由空间分配;

    class sample{ class Dummy {}; void* operator new(size_t, Dummy); }; sample glob; //fine void g() { sample loc; //fine sample* p = new sample; // error }

    3) 对派生的控制, 一个比较tricky的方法

    class Usable_lock { friend Usable; private: Usable_lock() {} } class Usable : public virtual Usable_lock { //... public: Usable(); Usable(char*); //... }; Usable a; class DD : public Usable {}; DD dd; // error: DD::DD() cannot access Usable_lock::Usable_lock(): private member

     

    11/4/16-02: 操作符重载 prefix ++ and postfix ++

    class Ptr_to_X { X& operator++(); // prefix X operator++(int); // postfix }

     

    11/4/22 __FUNCTION__ Macro get the name of a function as a string


    最新回复(0)