明显的封装

Ram*_*uri 0 c++

新命令在堆中分配内存以存储对象.静态分配可能导致将对象放在堆栈上.但它们都不是记忆保护区.我可以访问它,它只是对象的地址,然后使用间接运算符,因此指向对象字段:

string str=string("hello");
void** str_this=(void**)&str;
char* str_data= (char*)*str_this;
str_data[0]='s';
str_data[1]=0;
cout <<str_data; // prints "sello"
Run Code Online (Sandbox Code Playgroud)

那么这仍然被认为是封装?是类用户(谁实例化对象)的费用,以避免poiting它的数据?

Joa*_*son 6

编程中的封装通常不意味着"如果你真的真的尝试就无法解决".

它通常意味着更接近于"能够明确区分应该暴露或不暴露的东西,并且不会有意外暴露或使用的东西".

我认为没有人会错误地将您的代码误认为是应该访问的字符串.