关于c++创建类对象的问题

2024年11月27日 17:47
有5个网友回答
网友(1):

这是一种用法,有它适合的场景。但也有基本规律。

众所周知,new A(xxx,……)是一个对象创建的方式。
但为什么还要一个CreateNew的方式呢?唯一的可能就是要用CreateNew取代new的方式。

其实有基本的点可以支持这种用法:
构造函数定义为非public,排除new的方式。
然后定义CreateNew的静态方法,可以在CreateNew的内部进行构造处理。
例如:create里需要判断某种条件,返回不同的A。两种层次:一是返回不同的A的派生类(工厂模式的变种),一是用不同的构造函数去初始化A。

总结:
如果CreateNew里面单纯就是一个return new A;,当然是没有任何意义的。
但是CreateNew这种方式可以为一个类的构造提供特殊的控制机制。当然要视场景而用,反对因为模式而模式。
至于返回的是不是堆变量,是否需要delete,那是语法层面的小问题了。

网友(2):

普通创建有时会不成功
我一般都用Create,调用的时候SHOW,关闭的时候HIDE,这样保险

网友(3):

这方法用不好会有很严重的问题的

网友(4):

首先这是个静态函数,静态的成员函数,其实跟全局的函数区别不大,就是不属于成员函数,不能调用类内的成员变量
A* p = new A;
A* q = CreateNew();
两个区别不大,都是new一个A类的对象,赋值给一个类的指针,都是在堆上分配
A a; // 定义对象是可以的,也就是说可以在栈上分配
但CreateNew()只能在堆上分配

网友(5):

你用static A* CreateNew() { return new A; } 这个方法差创建的是全局变量
等你delete A的时候 对象才会被销毁 或者 完全退出 程序 才会被销毁 使用多了吃内存
还有可能内存泄露

而普通 A a 这样 是局部变量 离开定义函数就被销毁