Why memory leak here after operator<< call? Without operator<< everything is okey: #include #include class String { public: String(const char* str) : size(strlen(str)), str(new char[size + 1]) { for (uint32_t ch = 0; ch != size; ++ch) { this->str[ch] = str[ch]; } this->str[size] = '\0'; } ~String() { delete[] str; } int size; char* str; friend std::ostream& operator<<(std::ostream& cout, const String & s); }; std::ostream& operator<<(std::ostream& cout, const String & s) { cout << s.str << "\n"; return cout; } int main() { String s1("hello"); std::cout << s1; return 0; }