![]() |
1
9
我想你对
new运算符的主要用法是使用一个不同于系统默认分配器的内存分配器(通常是malloc),它的目的是返回一个未初始化的内存区域,编译器将在该区域调用构造函数。但是构造函数被称为 之后 内存分配在写入新调用的作用域中(在本例中为main)。 验收单后 对未表述问题的完整解决方案: 如何强制类的用户在堆中实例化? 是使构造函数私有化并提供工厂功能,如其他一些答案所示(如 villintehaspam 指出。 |
![]() |
2
10
您可以这样做来强制在堆上创建对象:
然后当你使用它时:
您可能需要考虑返回共享指针而不是原始指针,以帮助确保对象被删除。 从技术上讲,这不是你所要求的,而是你所表示的你想要实现的…… |
![]() |
3
5
new不调用构造函数-编译器调用,构造函数必须可以访问它。取这个简单的代码:
显然,new没有调用构造函数,但是如果编译它,仍然会收到一条“私有构造函数”错误消息。 |
![]() |
4
1
由于各种各样的人都不清楚你所做的事情是行不通的,我过去实现你“不在堆栈上”目标的方式是这样的。
现在唯一实例化它的方法是: heapOnly*myObj=heapOnly::createInstance(); |
![]() |
5
1
在这方面,构造函数实际上与其他成员函数没有什么不同:如果它们被标记为
现在,即使您没有声明任何构造函数
你自己
C++编译器将提供某些默认构造函数,甚至提供默认赋值操作符。
而这正是
|
![]() |
6
0
问题是,如果构造函数是私有的,则不能实例化对象。 为什么要将构造函数设置为私有? |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |