Chào mọi người!
Em đang có vấn đề là làm sao khi tạo lập một đối tượng trong hàm rồi trả về property là con trỏ của đối tượng, để giải thích cho vấn đề thì có example như sau.
class String {
private:
char* original;
public:
/**
* String constructor
*/
String(char *target) {
int length = strlen(target);
this->original = new char[length + 1];
int index;
for(index = 0; index < length; ++index) {
this->original[index] = target[index];
}
this->original[length] = '\0';
}
/**
* String destructor
*/
~String() {
delete this->original;
}
/**
* Menthod toStirng
*
* @return char*
*/
char *toString() const {
return this->original;
}
/**
* Static method toString
*
* @param target char*
* @return char *
*/
static char *toString(char *target) {
String result = target;
return result.toString();
}
};
int main() {
/* code */
char *pointer = String::toString((char*) "Ahihi");
cout << pointer << endl;
return 0;
}
Trong hàm static toString khi tạo lập đối tượng String rồi return result.toString() thì sẽ không trả về pointer original được vì cái result đã bị out scope nên bị xóa mất cái original. Đây là hình ảnh khi chay đoạn code trên.

Nó sẽ không in ra gì cả vì pointer đã bị delete. Em biết là chúng ta có thể cấp phát một con trỏ char* trong hàm này rồi copy data qua rồi trả về, nhưng dùng cách này thì ta phải delete cái pointer đó ngoài hàm main. Nhưng em không muốn như vậy, có cách nào có thể không cấp phát trong hàm static mà vẩn trả vê được được không ạ?
Đây là example nên mọi người đừng xét nét cú pháp logic nó quá nhé.
Em xin cảm ơn
thử hàm static toString nhận input là 1 số xem.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?