问题标签 [automatic-storage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 除了堆栈和堆模型之外,C++ 还实现了哪些其他形式的自动和动态存储?
在 C++ 规范中,术语“自动”和“动态”存储可以说分别优于“堆栈”和“堆”,因为 C++ 规范不要求使用堆栈/堆模型专门实现分配/解除分配。
除了堆栈和堆之外,还有其他用于分配/解除分配的模型吗?
c++ - 为什么自动对象的析构函数被调用两次?
(我的问题的答案涉及复制构造函数,但是复制发生在从函数返回时,而不是在对另一个类的方法调用中。我实际上看到了引用的可能重复项,但没有从 vector 制作的副本中推断出:: push_back 我这里的函数也做了一个副本。也许我应该有。)
我试图了解自动对象的构造/破坏。我遇到了一些对我来说很可疑的代码,所以我编写了自己的版本来努力理解它。简而言之,原始代码包含一个函数,该函数返回该函数的本地对象(自动)。这对我来说看起来不安全,所以我编写了这个程序来探索它:
我得到这个输出:
这是输出中的第四行让我感到困惑。
Phantom 1 是在main
输入时自动构建的。
Phantom 2 是在getPhantom
输入时自动构建的。
Phantom 2 在getPhantom
退出时会自动销毁(这就是为什么我认为返回它getPhantom
是不安全的)。
但在那之后我很困惑。根据调试器,在第四行输出出现之前getPhantom
已经返回。第二次调用 's 的析构函数时,调用栈是这样的:Phantom
在托管语言中,我可以看到这一行:
会破坏 Phantom 1,但不会触及 Phantom 2。这是 C++,而不是 Java。
是什么导致第二次调用 Phantom 2 的析构函数?
c++ - 为什么这种自动存储结构仍然存在?
代码
stack.h
:
main.cpp
:
评论
大多数main()
可能无关紧要,但我只想展示我在做什么。push()
并且pop()
是重要的块。
上面的代码应该用Item
s 填充堆栈。当 anItem
被弹出时,它payment
被添加到 runningtotal
中。
此外,请区分Stack
方法pop()
和push()
.main()
困境
代码完全按照我的意愿工作,但我不明白为什么......
Item
我在push()
函数中创建了一个本地。它被引用并放置在Stack
. 但是,当push()
函数结束时,Item
由于它在自动存储上,不应该删除这个本地吗?然而,不知何故它仍然存在,因为当我打电话时pop()
,它就在那里。
c - 返回指向自动变量的指针的函数
所以我正在使用一个具有十多年历史的大脑图像 I/O 的“标准”库。我遇到了这个功能:
我的问题是,这个函数怎么会返回一个指向自动变量的本地指针?由于 nim 指针超出范围并且应该在功能完成后被删除,因此这种做法是否被禁止?
我已经阅读了这个问题,但无法得到我的答案:
c++ - 有没有办法强制实例只在堆栈上?
我有一个 C++ 类,我只希望它在堆栈上实例化。我正在使用 api 访问以另一种(解释)语言开发的内容,该语言带有自己的垃圾收集。该语言中的机制足以将它找到的任何引用的内容单独留在堆栈上,并且由于该本地类包含这样的引用,因此对于正确的行为至关重要的是,它所执行的本地 C++ 类的用户永远不要尝试在其他任何地方分配它的实例。
注意,我不仅想禁止用 new 分配我的类的实例(如果这就是我需要做的,我可以重载类的new
运算符并将其设为私有,或者从 C++11 开始显式删除它),但也不允许该类的任何静态或可能的全局实例。安全地实例化这个类的唯一有效方法应该是在堆栈上,我想以某种方式保证这一点。据我所知,将其设为new
私有或删除它也不会阻止将另一个类声明为我的类作为成员变量,并在堆上分配该类的实例。
我现在的管理方式是将“本地”一词作为类名称的一部分,作为对用户的友好提醒,该实例仅用于堆栈,但当然,这不是t 实际上是由编译器或任何其他机制强制执行的,我更喜欢一个更具可执行性的解决方案。
理想情况下,我想在编译时确保这一点,如果使用不当,编译会失败。如果这根本不可能,那么在构造实例时在运行时抛出异常仍然是可接受的回退。在 C++11 或 C++14 中工作的解决方案很好。
请注意,这个问题绝对与这个问题不同,它只是想防止分配new
c - 堆栈上的结构 - 字段已初始化?
考虑以下代码:
在这个片段s
中是在堆栈上。是否保证编译器将所有结构字段初始化为零?
c - 在其内存应该已被释放后访问可变长度数组
我目前正在研究可变长度数组和自动存储。
我有以下代码为myArray
函数内部的可变长度数组分配内存vla
,并从函数返回指向可变长度数组的指针。
我以为变长数组属于自动存储类(即当我们进入包含变长数组的函数时会为变长数组分配内存,函数退出后会自动释放内存)
那么按照这个逻辑,分配给myArray
变长数组的内存在我们从vla
方法返回后就被释放了,但是为什么我仍然可以正确访问变长数组的第一个和第二个元素呢?
是否定义了这种行为?还是只是碰巧起作用的未定义行为?
batch-file - 批处理或 vb 脚本从 excel 文件中读取 URL 并将 URL 附件下载到指定位置或目录
我正在寻找一个 VB 脚本或批处理文件来从包含 B 列中的 URL 数据的 CSV 文件中读取和执行多个 URL 并且提到的 URL 直接包含在可下载文件中,该文件需要存储在代表内容命名的位置或目录中存储在 A 列中。
A列和B列可以反之亦然。
我正在尝试使用批处理文件做同样的事情,但无法自动读取 CSV 文件,而是能够创建如下所示的简单代码,但日常使用不会成功,因为自动因为总是需要手动干预,请相应地提供帮助,同时检查 Python 解决方案代码可用但不想按要求使用它 Python 安装也不想这样做。
编辑 :
还尝试了以下 VBscript 能够下载文件并创建文件夹但无法将下载的文件移动到相应文件夹:
其中 1.txt 包含 url 列表,2.txt 包含要创建的相应 URL 文件夹名称的列表
这里有几个示例 URL,您可以将其用作示例。 http://www.iiswc.org/iiswc2009/sample.doc
https://www.scc.kit.edu/downloads/jrg-mb/Abstract_template.doc
https://www.k-state.edu/grad/etdr/template/mastersinstructions.doc
c - 自动存储持续时间结构初始化
其中一些可能是重复的,但我很抱歉。
假设我有这个struct
:
1.如果struct foo
类型对象以具有自动存储持续时间且没有初始化器的方式声明,是否保证它的所有成员都将被强制初始化为零?
2.如果struct foo
类型对象以具有自动存储持续时间并带有一些初始化程序的方式声明,是否保证未显式初始化的成员将被强制初始化为零?
3.如果struct foo
类型对象以具有自动存储持续时间的方式声明并使用复合文字表达式,是否保证未显式初始化的成员将被强制初始化为零?
非常感谢任何 C 标准参考!谢谢!
save - 自动保存 Debian
我有一个 Debian 服务器,我希望自动“保存”一些文件并将它们自动发送到 googledrive。此自动任务必须定期完成(例如每周)