forthespada / InterviewGuide

🔥🔥「InterviewGuide」是阿秀从校园->职场多年计算机自学过程的记录以及学弟学妹们计算机校招&秋招经验总结文章的汇总,包括但不限于C/C++ 、Golang、JavaScript、Vue、操作系统、数据结构、计算机网络、MySQL、Redis等学习总结,坚持学习,持续成长!
https://interviewguide.cn/
Apache License 2.0
5.3k stars 1.42k forks source link

C++基础语法第78条 #72

Open GG668 opened 2 years ago

GG668 commented 2 years ago

78、类如何实现只能静态分配和只能动态分配 前者是把new、delete运算符重载为private属性。后者是把构造、析构函数设为protected属性,再用子类来动态创建

我这算不算绕过了动态分配,直接静态分配(前提是不使用友元函数和A的内部函数),我重载过A的操作符 new,发现并没有调用

#include <iostream>
using namespace std;
//只能动态分配
class A
{
protected:
    A(){cout<< "1" <<endl;}
    ~A(){}
public:
    void test(){A a;}
};
class B: public A
{
public:
B(){}

};
int main()
{
    B b;
    return 0;
}
GG668 commented 2 years ago

只静态分配 void* operator new(size_t size) = delete; 这样子应该可以禁用 new,但是只动态分配好像没办法完全杜绝,总有漏洞