这可能是一个基本问题,可能已经被问过(比方说,这里); 但我还是不明白.所以,让我问一下.
考虑以下C++类:
class Obj{
char* str;
public:
Obj(char* s){
str = s;
cout << str;
}
~Obj(){
cout << "Done!\n";
delete str; // See the comment of "Loki Astari" below on why this line of code is bad practice
}
};
Run Code Online (Sandbox Code Playgroud)
以下代码片段之间的区别是什么:
Obj o1 ("Hi\n");
Run Code Online (Sandbox Code Playgroud)
和
Obj* o2 = new Obj("Hi\n");
Run Code Online (Sandbox Code Playgroud)
为什么前者调用析构函数,但后者不调用(没有显式调用delete)?
哪一个更受欢迎?
以下两种方式创建类对象有什么区别:
class cat
{
private:
int age;
public:
cat();
};
int main(void)
{
cat object; // static object
cat *pointer = new cat(); // dynamic object
}
Run Code Online (Sandbox Code Playgroud) 我有两个问题.
1)构造函数真正做了什么?如果我们在声明实例时不使用构造函数会发生什么?
你能告诉我这两者之间的区别吗?
A a(1,2)
A *a = new A(1,2)
Run Code Online (Sandbox Code Playgroud)
最好的祝福.
这两个陈述有什么区别?
stringstream *myStream = new stringstream(s);
Run Code Online (Sandbox Code Playgroud)
和
stringstream myStream(s);
Run Code Online (Sandbox Code Playgroud)
我听说首先返回一个指针并"动态"分配内存.但我真的不明白其中的区别.
先感谢您
通过这个问题,一个答案说创建的对象在其范围之外被销毁.为了清楚地理解这个概念,我编写了以下代码:
#include <iostream>
using namespace std;
struct Node{
int val;
Node *next;
Node(int x) : val(x) , next(NULL){}
};
int main(){
for(int i=0;i<10;i++){
int someval = rand()%100;
Node somenode = Node(someval);
printf("Address for object %d is %p \n",i+1, &somenode);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
Address for object 1 is 0x7ffc32ff26b0
Address for object 2 is 0x7ffc32ff26b0
Address for object 3 is 0x7ffc32ff26b0
Address for object 4 is 0x7ffc32ff26b0
Address for object 5 is 0x7ffc32ff26b0
Address for object 6 is 0x7ffc32ff26b0 …Run Code Online (Sandbox Code Playgroud) 所以在C++中你可以使用new关键字实例化对象,否则......
Object o = new Object();
Run Code Online (Sandbox Code Playgroud)
但你也可以这样做
Object o = Object();
Run Code Online (Sandbox Code Playgroud)
b/w两者究竟有什么区别,为什么我会使用另一个呢?