分配给char *ptr
的内存是多少:
#include <iostream>
using namespace std;
class A
{
private:
int count;
char *ptr;
public :
void print()
{
cout << "Addr " << &ptr << endl;
cout << "Addr " << *ptr << endl;
}
};
int main()
{
A obj;
obj.print();
A *obj1 = new A(obj);
obj1->print();
cin.get();
return 0;
}
我正在使用编译器提供的复制构造函数。我有兴趣了解我将为*ptr
分配多少内存。
答案 0 :(得分:5)
内存多少?好吧,根本没有。你所拥有的只是一个整体char*
,它本身占用了sizeof(char*)
个字节的内存。您需要自己分配内存(可能使用new
)并将该内存分配给ptr
。完成后,不要忘记释放记忆(可能是delete
);通常在析构函数中完成。
更好的是,使用std::string
为你照顾所有的记忆。
(P.S。从技术上讲,行cout << "Addr " << *ptr << endl;
为您提供未定义的行为,因为您正在取消引用一个单元化指针。)
答案 1 :(得分:1)
仅char *
在32位计算机上占用4个字节,在64位计算机上占用8个字节。当您将内存(可能使用new
分配)分配给ptr
时,只有内存地址存储在ptr
中,而实际内存分配在堆上。