- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在他的新书中TC++PL4, Stroustrup 对 a once usual practice 的看法略有不同。 regarding user-controlled memory allocation and placement new
——或者,更具体地说,关于神秘的“位置 delete
”。在书的宗派。 11.2.4,Stroustrup 写道:
The "placement
delete
" operators do nothing except possibly inform a garbage collector that the deleted pointer is no longer safely derived.
这意味着合理的编程实践将遵循 a call to placement delete
对析构函数的显式调用。 .
很公平。但是,有没有更好的语法来调用placement delete
比晦涩难懂
::operator delete(p);
我问的原因是 Stroustrup 的教派。 11.2.4 没有提到这种奇怪的语法。事实上,Stroustrup 并没有详述此事;他根本没有提到语法。我隐约不喜欢 ::operator
的样子,它将命名空间解析问题插入到与命名空间无关的事情中。不存在更优雅的语法吗?
作为引用,这里是 Stroustrup 在更完整的上下文中的引述:
By default, operator
new
creates its object on the free store. What if we wanted the object allocated elsewhere?... We can place objects anywhere by providing an allocator function with extra arguments and then supplying such extra arguments when usingnew
:void* operator new(size_t, void* p) { return p; }
void buf = reinterpret_cast<void*>(0xF00F);
X* p2 = new(buf) X;Because of this usage, the
new(buf) X
syntax for supplying extra arguments tooperator new()
is known as the placement syntax. Note that everyoperator new()
takes a size as its first argument and that the size of the object allocated is implicitly supplied. Theoperator new()
used by thenew
operator is chosen by the usual argument-matching rules; everyoperator new()
has asize_t
as its first argument.The "placement"
operator new()
is the simplest such allocator. It is defined in the standard header<new>
:void* operator new (size_t, void* p) noexcept;
void* operator new[](size_t, void* p) noexcept;
void* operator delete (void* p, void*) noexcept; // if (p) make *p invalid
void* operator delete[](void* p, void*) noexcept;The "placement
delete
" operators do nothing except possibly inform a garbage collector that the deleted pointer is no longer safely derived.
Stroustrup 然后继续讨论放置的使用 new
与竞技场。他似乎没有提到安置 delete
再次。
最佳答案
如果你不想使用::
,你真的没有必要。事实上,您通常不应该(不想)。
您可以为 ::operator new
和 ::operator delete
提供替换(以及数组变体,尽管您永远不应该使用它们)。
但是,您也可以为类重载 operator new
和 operator delete
(是的,您可以再次使用数组变体,但仍然不应该永远使用它们)。
使用 void *x =::operator new(some_size);
强制分配直接进入全局 operator new
而不是使用特定类(如果存在)。当然,通常情况下,如果存在类特定类(如果不存在则使用全局类)。这正是您使用 void *x = operator new(some_size);
(即无范围解析运算符)所获得的结果。
一如既往,您需要确保您的new
和delete
匹配,所以您应该只使用::operator delete
来当/如果您使用 ::operator new
分配内存时删除内存。大多数时候你不应该在任何一个上使用 ::
。
主要的异常(exception)是当/如果您实际上正在为某个类编写 operator new
和 operator delete
。这些通常会调用 ::operator new
来获取一大块内存,然后将其分成对象大小的 block 。要分配那么大的内存块,它通常(总是?)必须显式指定 ::operator new
,否则它最终会调用自己来分配它。显然,如果在分配数据的时候指定了::operator new
,那么也需要指定::operator delete
来匹配。
关于c++ - 运算符删除函数的放置形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17392190/
这是一个新手理论问题 - 我刚刚开始使用 Python 并研究 Django 和 orm。问题:如果我开发我的对象并通过额外的开发修改基础对象结构、继承等 - Django 的 ORM 解决方案会自动
我正在使用带有服务器端处理器的 JavaScript 表单,并且我希望能够让表单根据下拉列表转到不同的电子邮件。我已经根据其他表格尽了最大努力,但似乎无法通过电子邮件。我已在电子邮件地址的选项标签下添
一个简单的问题:给定定义,(来自 Haskell SOE) do x — el; el\ ...; en => el »= \x — do e2\ ...; en 和: do let d
我是 Angular 5 的新手。我目前正在研究 Angular Reactive 表单。我有一个下面的 JSON 结构,我需要在从 FORM 获取值后发回 REST API。 JSON 结构: {
我是 Angular 5 的新手。我目前正在研究 Angular Reactive 表单。我有一个下面的 JSON 结构,我需要在从 FORM 获取值后发回 REST API。 JSON 结构: {
我有一个类型(称之为 A),我想创建一个 A -> A、A -> A -> A、A -> A -> A -> ... 等类型的函数的类型类.这不起作用: {-# LANGUAGE FlexibleIn
我正在使用 java 线程同时管理多个 (3) 程序。1 用于 Java swing 表单(绘制 UI 以进行输入),1 用于在系统托盘上设置图标(从 UI 获取输入后立即启动),1 用于处理输入并将
在当前的元素中,我在表单中遇到了一个问题。表单中标签的字体大小可能大于默认值。如果我把它举起来,那么右边的输入必须垂直居中。 我查看了 Bootstrap 和 Foundation,但都没有解决这个问
为了好玩,我使用了一段从 friend 那里得到的代码,并尝试创建一个包含用户名和密码的登录字段,但我很难获得单词旁边的字段。 username 这个词和你输入的框之间有很大的差距。密码也是如此。 这
我的表单中有一个嵌套的控制组,我想访问它们的表单状态值(如原始和有效)以动态显示验证错误。 是这样动态构建的 controlMap['password'] = this.password; contr
发送后我试图重置我的表单,但只有值设置为空。 component.html {{note.value?.length || 0}}/10
我正在尝试自定义 Stripe 结帐表单,但我不知道如何添加输入。我想添加“电话号码”和“姓名”以创建费用和客户。你知道我该怎么做吗? 这是我应该自定义的代码。 最佳答案 您将无法使用
所以我有这个需求,我想以表格的形式提交一个由五个记录组成的表单。这就是它的样子表: 这是对应的代码: Section Q.No Question
我有一个使用 react 形式和输入文本的情况。 我需要: 当用户输入时,根据输入的内容建议一个列表(我使用的是 ngx bootstrap typeahead); 仅当用户失去输入焦点时才验证输入字
我希望重构我的 Angular 项目中的大量组件,以具有强类型的 FormGroups、FormArrays 和 FormControls。 我只是在寻找一种实现强类型 react 形式的好方法。任何
我有事件表格: 'horizontal', 'fieldConfig' => [ 'template' => "{input}\n{hint}\n{error}",
是否有关于如何实现多选和响应式表单的示例? 我正在尝试在 multiselect-dropdown 上设置所选项目(从数据库中检索),它会更新显示的项目( View ),但会引发以下错误: core.
我想在表单中添加按钮以动态添加输入。但是我发现,如果我在表单中添加了一个仅记录到控制台的按钮(并且当我尝试添加输入时),它将记录日志,然后表单中断。我的Electron应用程序的前端窗口崩溃(不退出但
我有一个这样的表格 此表单位于指令内: angular.module('crowdcoreApp').directive('investorForm',function(){
我在 angularjs Controller 中调用的 $mdDialog 中有一个表单,如下所示: actions-controller.js function callForm() {
我是一名优秀的程序员,十分优秀!