【发布时间】:2016-05-25 04:58:52
【问题描述】:
(5.3.4)
新表达式:
::opt_new new-placement_opt new-type-id new-initializeropt
::opt_new new-placement_opt ( type-id ) new-initializeropt
由 new-expression 创建的实体具有动态存储期限 (3.7.4)。 [注意:这种实体的生命周期不一定 仅限于创建它的范围。 ——尾注]
我认为以下有 1 个具有 自动 存储持续时间的主要对象 (local_object) 和 3 个具有 动态 存储持续时间的虚拟类。
struct dummy
{
int a;
};
char local_object[256];
dummy * a = new(&local_object) dummy;
dummy * b = new(&local_object +100) dummy;
dummy * c = new(&local_object +200) dummy;
用户@M.M.认为只有一个对象(local_object),其余的只是指针。这是正确的吗?
(3.7)
动态存储持续时间与使用 operator new
创建的对象相关联
【问题讨论】:
-
像这样使用内存与您刚刚使用普通旧
new给您的内存完全相同。唯一的区别是你知道它在哪里。 -
@5gon12eder 问题是
*a是动态存储时长还是自动存储时长 -
一个相关的问题是
new(&local_object)是否被认为是获取存储 -
为什么这是一个问题?
new是new。放置 new 不会使放置的对象有任何不同;它们仍然需要使用它们的析构函数来销毁。 -
@5gon12eder 好吧,这就是这个问题的意义所在,新位置是否会使对象更改为具有动态存储持续时间? (问题中提供的引号似乎表明确实如此)
标签: c++ language-lawyer