|
1
21
在这里
我们一般讲变量的作用域:从声明点到相应的右括号;并且该语言保证在退出作用域时销毁,无论是使用
另一方面,C++还具有动态变量,即使用
在这里
在第(4)行中,我们构建了一个动态变量(使用
如果我们回到第一个例子:
雷伊 RAII的意思是 在C++中,由于我们没有垃圾收集,这个习惯用法主要应用于内存管理,但它也适用于任何其他类型的资源:多线程环境中的锁、文件锁、网络中的套接字/连接等。
它与第一个示例非常相似,只是我动态地分配了
我个人认为
C#平行
在C语言中,主要使用动态变量
|
|
|
2
3
main()的第一行是在堆栈上分配一个SomeClass对象。这个
因为您知道C,所以每次您说
虽然堆栈上分配的内容的释放是自动完成的,但堆上分配的内容的释放必须由程序员完成。
您的困惑源于C#(我不使用它,但我知道它类似于Java)没有堆栈分配这一事实。你说什么的时候做什么
|
|
|
3
2
就你而言,
这个
|
|
|
4
2
当您声明一个变量时(没有
当一个对象存在时,如果它有一个用户声明的构造函数,那么它的一个构造函数被用来初始化它。类似地,如果它有一个用户声明的析构函数,则在对象超出范围执行任何必需的清理操作时使用它
. 这与具有终结器的语言不同,终结器可以运行,也可以不运行,当然不在确定的时间点。更像是
使用创建对象时
|
|
|
5
2
其他一些答案基本上告诉您“sc在堆栈上分配,new在堆上分配对象”。我不喜欢这样想,因为它将实现细节(堆栈/堆)与代码的语义相结合。既然你已经习惯了C的做事方式,我想这也会产生歧义。相反,我更喜欢的方式是C++标准描述它的方式:
sc是SomeClass类型的变量,在块范围内声明(即,组成main函数的大括号)。这被称为
. 因为没有申报
早些时候我说“因为它没有申报
使用时
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |