【发布时间】:2013-06-11 20:37:43
【问题描述】:
我是一名经验丰富的 C 开发人员,刚刚开始接触 C++,我必须承认,我很困惑有多少种方法可以创建、保留和销毁 C++ 对象。在 C 中,生活很简单:在堆栈上分配 = 副本,malloc/free 在堆上管理数据。 C++ 远非如此,至少在我看来是这样。
鉴于此,以下是我的问题:
- 所有有哪些方法可以创建 C++ 对象?直接/复制构造函数、赋值等。它们是如何工作的?
- 与所有这些类型的对象创建相关的所有不同的初始化语法是什么?
T f = x、T f(x);、T f{x};等有什么区别? - 最重要的是,何时在 C++ 中复制/分配/无论
=是正确的,您想在什么时候使用指针?在 C 语言中,我非常习惯于在 lot 周围抛出指针,因为指针分配很便宜,但结构复制却不那么重要。 C++ 的复制语义对此有何影响? - 最后,
shared_ptr、weak_ptr等这些都是什么?
对不起,如果这是一个有点宽泛的问题,但我很困惑何时使用什么(甚至没有提到我对集合中的内存管理和new 运算符的困惑),我觉得一切我知道 C 内存管理在 C++ 中崩溃了。这是真的,还是我的心智模型错了?
总结一下:C++ 对象是如何创建、初始化和销毁的,我应该什么时候使用每种方法?
【问题讨论】:
-
你对 C++03 还是 C++11 感兴趣?
-
你应该把它分成更小的、单个问题的帖子。
-
我记得在我的编程语言原理课程中读到过它们
-
@juanchopanza 我明白你的意思,但我觉得所有这些问题都紧密相连。我认为拆分它会丢失我缺少的部分:整个生命周期如何组合在一起的大图。
-
这个问题太宽泛了。读一本书。 stackoverflow.com/questions/388242/…
标签: c++ memory-management