首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中“(空)新”是什么意思?

在C++中“(空)新”是什么意思?
EN

Stack Overflow用户
提问于 2009-06-22 22:36:49
回答 3查看 2.1K关注 0票数 10

我一直在看一个Qt tutorial,它使用了一种我以前没有见过的结构:

代码语言:javascript
复制
 (void) new QShortcut(Qt::Key_Enter, this, SLOT(fire()));
 (void) new QShortcut(Qt::Key_Return, this, SLOT(fire()));
 (void) new QShortcut(Qt::CTRL + Qt::Key_Q, this, SLOT(close()));

我已经在没有(void)的情况下尝试过了,它仍然可以编译和工作,那么(void)的用途是什么呢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-22 22:38:44

将表达式转换为(void)基本上是告诉编译器忽略该表达式的结果(在计算它之后)。

在您的示例中,每个表达式(每个语句/行)都通过new运算符动态分配内存-由于new返回一个指向内存的指针(地址),因此通常的做法是将该指针存储在一个变量中,您可以使用该变量最终删除对象并释放内存。在您的示例中,由于指针被丢弃,显式转换为(void)使程序员的意图变得清晰:“我确切地知道我在做什么--请丢弃new返回的值。”

如果您对技术细节感兴趣(引用C++标准,第5条):

任何表达式都可以显式转换为cv void类型。该表达式值将被丢弃。注意:但是,如果值在临时变量(12.2)中,则该变量的析构函数直到正常时间才会执行,并且该变量的值将被保留以用于执行析构函数。-end笔记

左值到右值(4.1)、数组到指针(4.2)和函数到指针(4.3)标准转换不适用于表达式。

如果你想知道这些对象是如何被删除的(如果它们确实被删除了),答案是QShortcut的构造函数中的'this‘指针应该与new返回的值相同,并且可以传递给ShortcutManager。请注意,构造函数中的“this”与传递给QShortcut的构造函数的“this”指针不同。

票数 21
EN

Stack Overflow用户

发布于 2009-06-22 22:38:29

如果您丢弃这样的函数的返回值,一些C++编译器会给出警告。在这种情况下,代码看起来像是泄漏了内存,所以您会得到一个警告。(void)告诉编译器不要发出警告:“将此函数视为返回了void”。

票数 7
EN

Stack Overflow用户

发布于 2009-06-22 22:40:09

我认为从new语句返回的引用没有分配给指针。我看到this被传递了,所以QT必须对这个引用做些什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1029743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档