所以我有个学术问题。我能够用蛮力的方法解决这个问题,但我相信它在LINQ中是可以更优雅地解决的--然而,我无法找到这样做的方法。解决方案可以是C#或VB,是LINQ本身给我带来了麻烦。
我的目标如下:
public class Foo
{
public int FooId {get; set; }
public int Bar {get; set; }
/// <summary>
/// Contains list of FooId
/// </summary>
public int[] Stackability
}
我想知道在动态创建2d数组时分配了多少大小 假设我在c++中动态创建一个一维数组,结果如下所示 int* p = new int[10]; 这意味着堆内存中有40字节,栈内存中有8字节(根据我的编译器),但我很困惑,如果我将2d数组设为(对于10*10 2d数组),将分配多少内存 int** p = new int*[10];
for(int i = 0; i < 10; i++) {
p[i] = new int[10];
} 我的堆栈和堆中将分配多少内存,它在堆栈中是80字节,在堆中是400字节或其他什么
如果我想在栈上已经创建的对象上放置新的对象:
struct s{
s() { std::cout << "C\n";}
~s() { std::cout << "D\n";}
};
int main() {
s s1[3];
for(int i=0; i< 3; ++i)
s* newS = new (&s1[i]) s();
}
我得到了:
C
C
C
C
C
C
D
D
D
所以我们没有为前3个对象获取析构函数,这安全吗?如果我们只是覆盖在堆/栈上分配的对
我花了几个小时在一些好的C++书籍以及这里的堆栈溢出上寻找关于这个问题的讨论,虽然我已经看到了相当多关于“堆与堆栈”问题的问题,但我更具体地希望了解在创建类的对象成员时是否使用指针。
例如:
class A{
B c;
}
与
class A{
B*c;
}
在第一个示例中,这不是真正的“栈”分配,而是在“静态存储区域”中的分配,这是另一回事,所以我认为栈与堆的讨论不适用。
我不清楚的是这两种方法的优缺点。我读到的大多数代码似乎都在使用第二种选择,但为什么呢?
有可能我不知道这些技术的适当术语来正确地搜索这个网站,或者根本就没有关于这方面的问题。如果在其他地方确实有与此相关的答案,请务必让我知