C++ c++;内存是否泄漏
我有密码:C++ c++;内存是否泄漏,c++,memory,syntax,C++,Memory,Syntax,我有密码: class foo { public: bar(const QString& s){} ..... }; int main() { ..... foo f; for(int i = 0; i < 100; i++) f.bar(QString("%1").arg(i)); .... return 0; } 我对字符串“socket.bind(QHostAddress(“192.168.20.1”),50501)”有任何问题?没有内存泄漏。QS
class foo
{
public:
bar(const QString& s){}
.....
};
int main()
{
.....
foo f;
for(int i = 0; i < 100; i++)
f.bar(QString("%1").arg(i));
....
return 0;
}
我对字符串“socket.bind(QHostAddress(“192.168.20.1”),50501)”有任何问题?没有内存泄漏。
QString
类管理自己的内存(假设您正在讨论这个问题)
您正在创建该类的临时文件,当调用foo::bar
返回时,该文件将被销毁。此时,析构函数将运行,释放QString
类所持有的所有内存
通常,只要您的资源由类管理,并且您没有使用new
分配它们,就不必担心释放资源,因为当类实例超出范围时,析构函数将运行
当您使用new
,或使用其生存期不由类管理的资源(如malloc
返回的内存或fopen
返回的文件(与fstream
相反,fstream是一个类,当它被销毁时会进行清理)),这时您需要确保对其进行清理
顺便说一句,最好的方法是将此类资源包装在一个类中,该类通过构造函数和析构函数管理资源的生命周期,然后使用该类而不是“原始”类资源;这称为模式。您的代码没有编译。我会先处理它。可能不会。
QString
是用来跟踪它自己的内存的,您只是传递一个副本。我假设foo
有一个xxx操作符()(QString const&)
的成员。您是指f.bar(QString(“一些字符串文本?”)请发布真实代码。不要凭记忆打字。悲伤,谢谢。Kerrek SB真实代码太大了。
class foo
{
QUdpSocket socket;
public:
foo();
void send_msq();
};
foo::foo(){
socket.bind(QHostAddress("192.168.20.1"),50501);
}
void send_msq()
{
socket.writeDatagram(...);
}