我多年来一直在使用Java.现在我需要了解一个C++程序.
TimeStamp theTimeStamp;
theTimeStamp.update();
Run Code Online (Sandbox Code Playgroud)
令我困惑的是为什么我们不写
TimeStamp theTimeStamp = new();
Run Code Online (Sandbox Code Playgroud)
我的直觉是,要使用对象,应首先分配内存空间并将其与对象关联.
我想这是Java和C++从根本上有所不同的一点?你能澄清一下吗?
[EDIED]我写了'TimeStamp theTimeStamp = malloc();'
我有一些由MATLAB Coder生成的代码.它包括这种类型的一些变量定义:
int tmp_size[400];
Run Code Online (Sandbox Code Playgroud)
在方法范围结束之前,不会显式删除这些变量.
变量是在堆还是堆栈上分配的?这相当于以下几点吗?
int* tmp_size = new int[400];
Run Code Online (Sandbox Code Playgroud)
是否最好用内存管理来重写这些变量定义new,比如int* tmp_size = new int[400];?
我注意到内存是由我的程序分配的,永远不会被释放.这可能是造成内存泄漏的原因吗?
c++ memory-leaks memory-management new-operator matlab-coder
我对在C++中输入字符串完全感到困惑.
char str[4];
cin>>str;
cout<<str;
Run Code Online (Sandbox Code Playgroud)
作品.但是
char* str;
cin>>str;
cout<<str;
Run Code Online (Sandbox Code Playgroud)
不起作用.为什么?
可以说我们有这个......
class MyClass
{
int value;
void addIntToObject(int num)
{
value = num;
}
}
MyClass *object = new MyClass();
object->addIntToObject(1);
object->addIntToObject(2);
Run Code Online (Sandbox Code Playgroud)
现在让我们说我们再做一次......
object = new MyClass();
Run Code Online (Sandbox Code Playgroud)
通过在同一个对象上使用new两次,这是否意味着我们删除了存储在对象中的所有数据?有人可以向我解释在同一个对象上使用new两次的确切工作方式
这是一种释放记忆的有效方法吗?(比如使用删除和删除[])
我应该在下面的示例中使用“删除”吗?
int main(){
T object;
T* pointer = new T[4];
delete[] pointer; // this line is redudant? or error?
pointer = &object;
}
Run Code Online (Sandbox Code Playgroud)
我向 Chat GPT 询问同样的问题,它说:“行删除是多余的,可能会导致未定义的行为,因为当您重新分配指针时,堆上的数据会自动释放”。但我对此有疑问。那么我应该在那里使用“删除”吗?