只能在栈上或者堆上创建的对象
今天在这里面看到了这个题目,据说还是Google面试题。
http://www.cnblogs.com/chio/archive/2007/10/23/934335.html
总的思想,是把一些在栈上或者堆上面创建对象,所必须的函数设为private使得编译报错。
比如:
只能在堆上创建,不能在栈上创建。因为栈上的对象,总是要调用析构函数。所以把析构函数设为private,然后new出来的对象,显式的调用delete就可以了。
class HeapOnly { public: void destroy() const { delete this; } private: ~HeapOnly(){}; }; int main() { //HeapOnly obj; HeapOnly *pobj = new HeapOnly; //do things pobj->destroy(); //delete pobj; return 0; }
也提到Singleton里面的那样方式,把构造函数放进private。但是那样不管直接new,还是在栈上面创建对象,都不能成功。
不能在堆上创建,只能在栈上面创建的对象。
就是把new和delete操作符重载为private。
class OnlyStack
{
public:
OnlyStack(){}
private:
void* operator new(size_t );
void operator delete(void*ptr);
//
}
int main( int argc, char* argv[] )
{
OnlyStack obj; // OK
//OnlyStack *pobj = new OnlyStack;// Error
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!