請幫助運營商delete
演示代碼新手:C++刪除操作符。如何正確使用?
MyType getDataFromDB()
{
Driver *driver;
Connection *con;
Statement *stmt;
ResultSet *res;
/* Create a connection */
driver = get_driver_instance();
con = driver->connect("tcp://127.0.0.1:3306", "login", "pass");
/* Connect to the MySQL test database */
con->setSchema("schema");
stmt = con->createStatement();
MyType resultAnythngAndAnother;
// First query
res = stmt->executeQuery("SELECT anything");
while (res->next())
{
// fetch data from "SELECT anything"
}
delete res; // <----- Question #1: Should I every time call delete res before next assigning of res variable?
// Another query
res = stmt->executeQuery("SELECT another");
while (res->next())
{
// fetch data from "SELECT another"
}
delete res; // <----- Question #2: Is it enough to call delete res only once here? Since it won't be used anymore.
return resultAnythngAndAnother;
}
- 問題1:我應該每次調用資源變量的下一個分配之前刪除資源?
- 問題2:僅僅調用一次delete res就足夠了嗎?因爲它不會再被使用了。
謝謝。
由於res被賦予了新的地址,所以如果你不在'#1'中調用'delete',你將失去對分配內存的訪問。所以是的,每次你給指針指定新的內存時,你都必須調用delete。 – xinaiz
@BlackMoses代碼中的哪個位置表示res被分配了新地址?爲什麼不能'stmt-> executeQuery(「SELECT something」);'只是返回一個指向stmt擁有的內存的指針? – Amadeus
爲什麼在天堂(取代任意的精神幻想)的名字是你在任何地方返回指針。您應該使用瞭解如何對自己的資源進行管理的對象。 –