当我们想创建这样的新对象时,为什么要使用对象指针?
employee *Steve = new employee();
Run Code Online (Sandbox Code Playgroud)
在本例中,我想创建一个名为 的对象Steve。
employee *Steve = new employee();
Run Code Online (Sandbox Code Playgroud) 有人可以告诉我这里发生了什么吗?
int* stackint = new int(5);
{
std::unique_ptr<int> myInt(stackint);
*myInt = 8;
}
std::cout << *stackint; // 0
Run Code Online (Sandbox Code Playgroud)
这里到底发生了什么?我理解智能指针,当你用 new 或 make_unique 构造它们时,当你将堆栈指针传递给它们的构造函数时会发生什么?
我是 C 和 C++ 新手。我知道每当调用一个函数时,它的变量都会在堆栈上分配内存,包括变量恰好是一个指针,该指针指向通过mallocor分配在堆上的数据new(但我听说不能保证malloc分配的存储100%在堆上,如果我错了,请纠正我)。例如,
Void fn(){\n Member *p = new Member()\n}\n \nRun Code Online (Sandbox Code Playgroud)\n或者
\nVoid fn() {\n int *p = (int*) malloc( sizeof(int) * 10 ); \n}\nRun Code Online (Sandbox Code Playgroud)\n如果我错了,请纠正,在这两种情况下,变量p(保存堆上分配的对象的地址)都在堆栈上,并且它指向堆上的对象。\n所以说所有的都正确吗?我们声明的变量位于堆栈上,即使它们可能指向堆上的某些内容?\n让\xe2\x80\x99s 说局部变量指针的地址p加载到内存地址001,它具有位于堆上的成员对象的地址,该地址是002。我们可以画这样的图。\n
如果这是正确的,我的下一个问题是,我们是否可以拥有一个实际位于堆上的指针,并且它指向位于堆栈上的变量?如果不可能,该指针是否可以指向位于堆上的变量?\n也许这个问题的另一种表达方式是:为了访问堆中的某些内容,我们只能通过堆栈上的指针来访问它?\n可能的图表如下所示
\n如果可能的话,我可以在这里举个例子吗?
\n\n我正在努力调试几个小时后内存不足的大型c ++程序,这些场景中的任何一个都会造成内存泄漏吗?
场景1:使用&(没有delete或类似的东西):
inline int testFunc(std::vector<int>& peaksArray, int& tmp) {
for (int Index : peaksArray)
{
tmp++
}
}
Run Code Online (Sandbox Code Playgroud)
场景2:使用char[](没有delete或类似的东西):
char debug[500];
Run Code Online (Sandbox Code Playgroud)
我永远不会在我的程序中使用:
new*delete (也许我应该 ?)谢谢你的回答,
问候