通过指针在多个STL容器中更新对象

时间:2015-07-20 06:07:43

标签: c++ pointers stl

我有一个名为<?php include 'connectionfile.php' ; error_reporting(E_ALL); ini_set('display_errors', '1'); if (isset($_POST['endings']) { $ref= mysql_real_escape_string($_POST['ref']); $titl= mysql_real_escape_string($_POST['titles']); $kind= mysql_real_escape_string($_POST['kindy']); $subjec= mysql_real_escape_string($_POST['subjects']); $caus= mysql_real_escape_string($_POST['causes']); $solutio= mysql_real_escape_string($_POST['solutions']); $penalt= mysql_real_escape_string($_POST['penaltys']); $not= mysql_real_escape_string($_POST['notes']); $endin= mysql_real_escape_string($_POST['endings']); session_start(); //You don't need to start session, don't see any reason $sql = "UPDATE report SET title = '$titl', type = '$kind', subject = '$subjec', cause = '$caus', solution = '$solutio', penalty = '$penalt' , note = '$not', ending = '$endin' WHERE reference = '$ref'"; $result = mysqli_query($con, $sql) or die(mysql_error()); } ?> 的小组:

Group

我指向存储在这些容器中的多个组:

class Group
{
    int id;
    string addr;
    set<int> members;
    ...
};

我正在存储指针:

vector<Group*> grpVec
map<int, Group*> grpIdMap 
map<string, Group*> grpAdMap  

现在,我想更新一个组对象。如果我只更新grpIdMap容器​​中的指针,那么所有其他容器中的同一对象指针是否会更新?

//create and populate group object pointer Group *grp
grpVec.push_back(grp)
grpIdMap.insert(std::pair<int,Group*>(grp->id, grp)) 
grpAdMap.insert(std::pair<string,Group*>(grp->addr, grp))

这种方法有什么问题吗?

3 个答案:

答案 0 :(得分:2)

如果指针都指向同一个对象,则可以使用任何指针来更改该对象。

让我们稍微看一下&#34;图形&#34;:

+-------------------+
| pointer in vector | -----\
+-------------------+       \
                             \
+--------------------+        \     +---------------+
| pointer in one map | -------->--- | actual object |
+--------------------+        /     +---------------+
                             /
+----------------------+    /
| pointer in other map | --/
+----------------------+

答案 1 :(得分:1)

此方法将更新对象。如果有任何指向此对象的指针(不是它的副本),那么它们将获得更新信息。

我建议您停止使用原始指针,并在此处阅读如何使用智能指针:Which kind of pointer do I use when?

我认为你应该看一下这个:http://en.cppreference.com/w/cpp/memory/shared_ptr

P.S。在类中使用封装。其他对象不应该知道数据如何存储在您的类中,只需提供接口。

P.P.S。如果您希望所有成员都公开,可能您想使用struct而不是class

答案 2 :(得分:0)

它正在改变指针指向的对象的值,而不是指针值。所以只要所有指针指向同一个对象,它就会起作用