operator delete(void*, size_t)第二个形参怎么用呢?

时间:2022-05-27 17:01:50
说是保存继承层次中实际类型大小,但释放内存又用不着。

10 个解决方案

#1


而书上的意思是虚析构的派生类必须要第二个参数~~什么意思呢?

#2


同理还有allocator类,deallocate(p, n);第二个参数在实现中完全没用到,实际上调用的还是::operator new(size_t)和::operator delete(void*),而这两个又调用malloc/free。也就是说allocate(10); deallocate(p, 5);实际上会完全释放内存。我算是对这些彻底茫然了。
大神求解啊

#3


你就当没用就可以了。不需要钻牛角尖。

#4


引用 3 楼 taodm 的回复:
你就当没用就可以了。不需要钻牛角尖。
c++还有这么坑爹的语法...

#5


特殊的语法是为特殊的场合设定。
你又不可能遇到这样的场合的,折腾它又何必呢。

#6


引用 5 楼 taodm 的回复:
特殊的语法是为特殊的场合设定。
你又不可能遇到这样的场合的,折腾它又何必呢。
难道c++ primer写的内容也算特殊么?那还叫primer。。。
而且需要预分配的类用到operator new很正常吧,如果这个类还要可以被继承,书上这部分不就用到了。。。

#7


倒,人家谦虚你也能当真。
需要预分配的类用到operator new是极不常见的。

#8


引用 7 楼 taodm 的回复:
倒,人家谦虚你也能当真。
需要预分配的类用到operator new是极不常见的。
我以为真是primer。。。
那一般预分配怎么实现呢?书上卖萌说预分配就operator new,囧

#9


引用 8 楼 godbreak 的回复:
引用 7 楼 taodm 的回复:倒,人家谦虚你也能当真。
需要预分配的类用到operator new是极不常见的。我以为真是primer。。。
那一般预分配怎么实现呢?书上卖萌说预分配就operator new,囧

卖萌。。。明明?
书没看过不清楚。不过operator new/delete非标准库规定的签名的具体语义取决于实现作者……(即便是标准库给出的都可以替换定义)。
至于allocator……ISO C++有allocator requirements决定接口形式:调用a.allocate(n, u)的u作为unspecified的hint倒是可以完全不用;调用a.deallocate(p, n)的n必须和allocate里的对上。只不过用::operator delete这种实现确实用不上n而已,因为::operator new必须已经知道n了。

#10


引用 9 楼 FrankHB1989 的回复:
引用 8 楼 godbreak 的回复:引用 7 楼 taodm 的回复:倒,人家谦虚你也能当真。
需要预分配的类用到operator new是极不常见的。我以为真是primer。。。
那一般预分配怎么实现呢?书上卖萌说预分配就operator new,囧
卖萌。。。明明?
书没看过不清楚。不过operator new/delete非标准库规定的签名的具体语义取决……
谢谢,我明白什么意思了。

#1


而书上的意思是虚析构的派生类必须要第二个参数~~什么意思呢?

#2


同理还有allocator类,deallocate(p, n);第二个参数在实现中完全没用到,实际上调用的还是::operator new(size_t)和::operator delete(void*),而这两个又调用malloc/free。也就是说allocate(10); deallocate(p, 5);实际上会完全释放内存。我算是对这些彻底茫然了。
大神求解啊

#3


你就当没用就可以了。不需要钻牛角尖。

#4


引用 3 楼 taodm 的回复:
你就当没用就可以了。不需要钻牛角尖。
c++还有这么坑爹的语法...

#5


特殊的语法是为特殊的场合设定。
你又不可能遇到这样的场合的,折腾它又何必呢。

#6


引用 5 楼 taodm 的回复:
特殊的语法是为特殊的场合设定。
你又不可能遇到这样的场合的,折腾它又何必呢。
难道c++ primer写的内容也算特殊么?那还叫primer。。。
而且需要预分配的类用到operator new很正常吧,如果这个类还要可以被继承,书上这部分不就用到了。。。

#7


倒,人家谦虚你也能当真。
需要预分配的类用到operator new是极不常见的。

#8


引用 7 楼 taodm 的回复:
倒,人家谦虚你也能当真。
需要预分配的类用到operator new是极不常见的。
我以为真是primer。。。
那一般预分配怎么实现呢?书上卖萌说预分配就operator new,囧

#9


引用 8 楼 godbreak 的回复:
引用 7 楼 taodm 的回复:倒,人家谦虚你也能当真。
需要预分配的类用到operator new是极不常见的。我以为真是primer。。。
那一般预分配怎么实现呢?书上卖萌说预分配就operator new,囧

卖萌。。。明明?
书没看过不清楚。不过operator new/delete非标准库规定的签名的具体语义取决于实现作者……(即便是标准库给出的都可以替换定义)。
至于allocator……ISO C++有allocator requirements决定接口形式:调用a.allocate(n, u)的u作为unspecified的hint倒是可以完全不用;调用a.deallocate(p, n)的n必须和allocate里的对上。只不过用::operator delete这种实现确实用不上n而已,因为::operator new必须已经知道n了。

#10


引用 9 楼 FrankHB1989 的回复:
引用 8 楼 godbreak 的回复:引用 7 楼 taodm 的回复:倒,人家谦虚你也能当真。
需要预分配的类用到operator new是极不常见的。我以为真是primer。。。
那一般预分配怎么实现呢?书上卖萌说预分配就operator new,囧
卖萌。。。明明?
书没看过不清楚。不过operator new/delete非标准库规定的签名的具体语义取决……
谢谢,我明白什么意思了。