- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当您知道在这种特定情况下析构函数是 noop 时,标准是否要求调用非平凡的析构函数?
如果不调用析构函数,代码是否可能被编译器破坏?
用例是一个包含动态分配指针的类。默认情况下,此指针由构造函数中的 new
获取。此类还可以从分配器获取其动态分配的指针。该类跟踪它如何获得其指针并在析构函数中调用 delete
如果指针是由 new
获得的,如果它是由分配器获得的则什么都不调用,因为分配器将释放内存。存储在动态内存中的数据只是普通类型,因此不需要调用它们的析构函数。
所以问题是,如果我知道它是通过分配器获得它的指针的,那么我还需要调用类的析构函数吗?
这是一个最小的简化示例,所有与问题不直接相关的内容都已删除。
struct Allocator {
void* ptr = nullptr;
void* Allocate(size_t size) {
ptr = malloc(size);
return ptr;
}
~Allocator() { // allocator will cleanup
if (ptr)
free(ptr);
}
};
struct C {
int* ptr;
bool need_cleanup;
C() {
ptr = new int[10];
need_cleanup = true;
}
C(Allocator& A) {
ptr = (int*)A.Allocate(10 * sizeof(int));
need_cleanup = false;
}
~C() { // non-triviall because user-defined.
if (need_cleanup)
delete[] ptr;
// noop if need_cleanup is false.
}
};
int main()
{
Allocator A;
alignas(C) char buffer[sizeof(C)];
C* c = new(buffer) C(A);
/// is it required to call c->~C();
}
最佳答案
没有。
For an object of a class type with a non-trivial destructor, the program is not required to call the destructor explicitly before the storage which the object occupies is reused or released; however, if there is no explicit call to the destructor or if a delete-expression (
[expr.delete]
) is not used to release the storage, the destructor shall not be implicitly called and any program that depends on the side effects produced by the destructor has undefined behavior.
您不依赖于 ~C
的任何副作用,因此您没有未定义的行为。
注意您可能应该放置 new[]
您的 A.Allocate
的 int[10]
C(Allocator& A) {
ptr = new (A.Allocate(10 * sizeof(int))) int[10];
need_cleanup = false;
}
关于c++ - 当它是 noop 时是否需要调用一个非平凡的析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56559504/
我看过语法 noop => noop here .我相当期待像 () => noop 这样的东西是有效的。 noop => noop 代表什么,什么时候应该使用它? 最佳答案 noop => noop
这个问题在这里已经有了答案: What's a standard way to do a no-op in python? (4 个回答) 5年前关闭。 通常我需要临时注释一些代码,但在下面的情况下,
在我的Angular 6应用程序中,我需要一个不执行任何操作的函数。显然,我可以自己编写,但是我正在阅读我想使用的有关angular.noop的文章。但是,当我尝试使用它时出现angular.noop
dbms_assert.noop 的实际用途是什么?由于此函数不执行错误检查并返回输入的字符串。 最佳答案 阅读here在 Pete Finnigan 的博客上,他讨论了 dbms_assert.no
在文档中它说, “当您希望操作不在给定方向上执行任何操作时,将 RunPython.noop 方法传递给 code 或 reverse_code。这在使操作可逆时特别有用。” 最佳答案 有时您可能想要
我正在尝试改进我的 MongoDB 服务器的 oplog,因为现在它覆盖的时间比我想要的要少(我现在不打算增加 oplog 文件的大小)。我发现oplog集合中有很多noops记录-{“op”:“n”
C++20 标准在 [coroutine.noop] 中定义了一个“noop 协程” .它是什么?它与主体为 { co_return; 的函数有何不同? }? 更新 感谢您提供提案和标准的链接。从这些
SMTP 规范中 NOOP 的目的是什么? 它说: This command does not affect any parameters or previously entered co
是否有一个函数只返回第一个参数?与 $.noop 或 angular.noop 类似,只是它们返回未定义。我正在使用 jQuery、Angular 和 lodash。 最佳答案 Angular : 正
我在 bash (:) 中搜索了 noop,但没有找到任何有用的信息。该运算符的确切用途或用例是什么? 我尝试了以下操作,它对我来说是这样工作的: [mandy@root]$ a=11 [mandy@
我正在使用:from("file:/somedir?noop=true&idempotKey=${file:name}-${file:modified}") 以便在每次更改文件时读取文件。当java进
我正在尝试定义一个 NOOP 宏。我经历了How do I implement a no-op macro or template in C++ .但是我收到了 unused variable 错误。
我正在使用 Python 3.6 在 Windows 上工作。我正在尝试制作一个 wWinMain() GUI使用嵌入式 python 解释器的应用程序。我有各种无法加载扩展模块的问题,但我不会深入探
当您知道在这种特定情况下析构函数是 noop 时,标准是否要求调用非平凡的析构函数? 如果不调用析构函数,代码是否可能被编译器破坏? 用例是一个包含动态分配指针的类。默认情况下,此指针由构造函数中的
什么是最简单、最短、最容易编写的 NOOP 语句来设置断点? 最佳答案 如果(真); 或 if(false); 注意 if 后面的分号,它是自包含的 编辑:while(true)break; 确实可以
我正在深入研究 Angular utils源代码,刚好遇到下面一行: export const NOOP: any = () => {}; 嗯,以上是显而易见的。声明一个不做任何操作的变量。现在在同一
我正在浏览用于构建 Pebble 表盘的模板(位于 cloudpebble.net)并看到了这段代码: void handle_minute_tick(AppContextRef ctx, Pebbl
我正在检查一个 Backbone.js 插件,我在其中找到了下面的代码。 callbacks : { search : $.noop, valueMatches : $.noop }
我试过在所有地方搜索它,甚至在 Angular.org 上搜索它文档,但找不到任何详细的实现说明。如果有人能解释一下,那将非常有帮助。 最佳答案 angular.noop 是一个空函数,当您需要将某个
这是关于 Django 教程 - 第 2 部分 http://docs.djangoproject.com/en/dev/intro/tutorial02/ 在更改管理页面模板的部分中,我尝试在 ba
我是一名优秀的程序员,十分优秀!