- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在basic.life C++ 标准的一部分,可以找到以下内容(强调我的):
The lifetime of an object o of type T ends when:
if T is a class type with a non-trivial destructor ([class.dtor]), the destructor call starts, or
the storage which the object occupies is released, or is reused by an object that is not nested within o ([intro.object]).
我正在尝试查找对象 o 的存储示例,该对象被 嵌套在 o 中的对象重用(相反标准所说的)。
首先,我需要确保我理解标准中“对象占用的存储 [...] 被嵌套在 o 中的对象重用”的含义。首先,为了重用存储,必须创建一个新对象。其次,要重用 o 的存储,必须在 o 使用的内存位置创建新对象。最后,必须在使新对象“嵌套在 o 内”的内存位置创建新对象,例如在“嵌套在 o 内”的已存在对象的位置。这是正确的吗?
我想到了一些例子,比如:
union 成员:
union U { double d; int n; }; U u = {1.0}; new (&u.n) int;
在字符数组中创建的对象:
char mem[sizeof(int)];
new (mem) int;
这些正确吗?还有其他例子吗?
谢谢。
最佳答案
我相信,标准中的“此处嵌套对象”只是指此处的成员子对象。从形式上讲,成员子对象占用其容器对象的存储空间,没有这种异常,类似于此代码
struct X {
Y y;
};
void foo(X& x) {
new (x.y) Y;
}
将结束 x
的存储。
另一个符合标准 (http://eel.is/c++draft/intro.object#4) 的嵌套对象示例是一个对象为另一个对象提供存储的情况。 unsigned char
(或 std::byte
)数组可以为另一个对象提供存储,如果它是在其中创建并放置新的。这几乎是您的第二个示例,除了在您的情况下 char 可以是有符号的或无符号的。
您的 union 示例是占用相同存储空间的非嵌套对象的正确示例。
关于C++ 标准 : end of lifetime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48713700/
我是Rust的初学者,无法编译以下代码。我知道这个问题可能并不新鲜,请尝试在各处搜索,但找不到以下问题的正确答案。 基本上,我试图从线程中调用方法,并且还使用不同的结构在线程之间发送和接收对象。 us
我的 lib.rs 中有以下结构 pub enum ConfigurationSource { StringContent(String), FileContent(PathBuf)
我有一个 trait Surface: 'static我想为 struct Obj 实现.特征需要是 'static因为我想存储 Surface 类型的对象在Vec> . 第一步我试过这个。 impl
我试图在可迭代序列中找到重复项。此外,我想知道到那时为止该序列中出现的元素。 我创建了一个 HashMap 并尝试从 take_while 使用的闭包中对其调用 insert。但是,由于与具体/绑定(
trait BT { fn get_a(&self) -> &A; } #[derive(Debug)] struct A { v: i32, } impl A { fn nb
在编写代码以适应 Rust 时,我偶然发现了一个编译器错误。我想了解为什么会收到错误以及如何处理: cannot infer an appropriate lifetime for lifetime
我试图了解 owned 的生命周期类,在用户定义的迭代器中使用时。考虑以下代码: var a = new owned C(); var b = new owned C(); a.i = 2; fora
我正在使用async-tungstenite来监听websocket,并使用async-std的StreamExt对结果流进行操作。 我想使用HashMap从websocket累积最新的股票行情指示器
我正在创建一个类似于映射的数据结构,其中每个值都提供了一种通过实现特征来检索其唯一键的方法。当临时创建关键字以例如在映射中查找值时,期望关键字引用相应值的一个或多个字段(或者仅引用堆栈数据等)。显然,
我正在创建一个类似于映射的数据结构,其中每个值都提供了一种通过实现特征来检索其唯一键的方法。当临时创建关键字以例如在映射中查找值时,期望关键字引用相应值的一个或多个字段(或者仅引用堆栈数据等)。显然,
我正在创建一个类似于映射的数据结构,其中每个值都提供了一种通过实现特征来检索其唯一键的方法。当临时创建关键字以例如在映射中查找值时,期望关键字引用相应值的一个或多个字段(或者仅引用堆栈数据等)。显然,
我想实现一个类似于调试 builders 的构建器由标准库定义。它们使用如下结构定义: struct DebugFoo { fmt: &'a mut std::fmt::Formatter }
我有点难过。我希望通过以下代码。 enum Source { String(&'self str), ReaderUtil(&'self ReaderUtil) } pub struc
我正在尝试获取 Windows 中耗时(以毫秒为单位)。我发现这样做的唯一方法是使用 FILETIME 结构获取自 1601 年以来的 100 纳秒数。但是 FILETIME 结构将值存储在两个变量中
对于 CakePHP 商店应用程序,我需要 365 天的 cookie 生命周期。该应用程序在使用 CentOS 7 和 Plesk 18.0.30、PHP 7.3 FPM 的托管 vServer 上
我最近遇到了一条我从未见过的借用检查器消息,我试图理解它。这是重现它的代码(简化的,现实生活中的例子更复杂)- playground : fn foo(v1: &mut Vec, v2: &mut V
据我所知,当我订阅铁路由器钩子(Hook)内的结果集时,如之前:或 waitOn:,它工作正常,但一旦另一条路线运行,它似乎就被拆除了。有谁知道这是否会发生? 假设是这样,这是否意味着使订阅在路由之间
我正在尝试将 str 转换为 Reader,但失败了。 下面的代码所做的是使用 with_str_reader 从 str 中提取 Reader use std::io::{with_str_read
当 a PayPal subscription is created 时,批准 URL 在响应中可用。 看起来像这样,包括一个 token : https://www.sandbox.paypal.c
在basic.life C++ 标准的一部分,可以找到以下内容(强调我的): The lifetime of an object o of type T ends when: if T is a cl
我是一名优秀的程序员,十分优秀!