![]() |
1
9
我想你对
new运算符的主要用法是使用一个不同于系统默认分配器的内存分配器(通常是malloc),它的目的是返回一个未初始化的内存区域,编译器将在该区域调用构造函数。但是构造函数被称为 之后 内存分配在写入新调用的作用域中(在本例中为main)。 验收单后 对未表述问题的完整解决方案: 如何强制类的用户在堆中实例化? 是使构造函数私有化并提供工厂功能,如其他一些答案所示(如 villintehaspam 指出。 |
![]() |
2
10
您可以这样做来强制在堆上创建对象:
然后当你使用它时:
您可能需要考虑返回共享指针而不是原始指针,以帮助确保对象被删除。 从技术上讲,这不是你所要求的,而是你所表示的你想要实现的…… |
![]() |
3
5
new不调用构造函数-编译器调用,构造函数必须可以访问它。取这个简单的代码:
显然,new没有调用构造函数,但是如果编译它,仍然会收到一条“私有构造函数”错误消息。 |
![]() |
4
1
由于各种各样的人都不清楚你所做的事情是行不通的,我过去实现你“不在堆栈上”目标的方式是这样的。
现在唯一实例化它的方法是: heapOnly*myObj=heapOnly::createInstance(); |
![]() |
5
1
在这方面,构造函数实际上与其他成员函数没有什么不同:如果它们被标记为
现在,即使您没有声明任何构造函数
你自己
C++编译器将提供某些默认构造函数,甚至提供默认赋值操作符。
而这正是
|
![]() |
6
0
问题是,如果构造函数是私有的,则不能实例化对象。 为什么要将构造函数设置为私有? |
![]() |
AstralHex · 矩阵乘法代码工作不正常 4 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 4 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 4 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 5 月前 |