编程语言书籍解释了在堆栈上创建了值类型,并且在堆上创建了引用类型,而没有解释这两者是什么.我还没有看清楚这个问题.我理解堆栈是什么.但,
language-agnostic heap stack memory-management dynamic-memory-allocation
我希望得到一些明确的信息,我发现大多数消息来源都令人困惑.
例如,
int *a=new int;
堆栈或堆中的"a",以及"*a"怎么办?我发现的大多数资源只涉及堆,我真的需要一个非常具体的答案.我真的很感激.
如题
#include <iostream>
int main() {
    auto* a = new float[1000000];
    auto* b = new float[10]();
    for(auto i=0; i<1000000; i++){
        std::cout << "a" << a[i] << std::endl;
    }
    for(auto i=0; i<10; i++){
        std::cout << "b" << b[i] << std::endl;
    }
    return 0;
}
有什么不同?我试过两个输出都是零。
另外关于智能指针,如何确保它可以零初始化。
std::unique_ptr<int[]> p = std::make_unique<int[]>(100);
我在使用 C++ 中的大量向量时遇到了一些麻烦。基本上我不需要一个包含 200 万个元素的数组,每个元素都是一个vector<int>(用于构建邻接列表)。
所以当我这样做vector<int> myList[10]时效果很好,但是当我这样做时vector<int> myList[2000000]它不起作用,我不知道为什么。
我试图这样做,unsigned long int var = 2000000; vector<int> myList[var];但仍然是同样的错误。(我不知道是什么错误,我的程序崩溃了)
如果你有任何想法,
谢谢
假设我有一个类Obj,并且它们的实例是在运行时创建的,我可以不new这样存储它们吗?
Obj my_obj;
std::vector<Obj> my_vec;
my_vec.push_back(my_obj);
还是我必须使用新的?
std::vector<Obj*> my_vec;
my_vec.push_back(new Obj);
如果我的类中有指针怎么办Obj?另外,如果使用第二个选项,我需要清理所有东西吗?
c++ ×4
arrays ×1
c++11 ×1
heap ×1
new-operator ×1
oop ×1
pointers ×1
stack ×1
unique-ptr ×1
vector ×1