它是否兼容" C ++哲学"重新编码自己的智能指针

时间:2018-04-03 10:45:54

标签: c++ shared-ptr smart-pointers weak-ptr

我对所有C ++编码人员提出了一个小问题! 对你来说,它是否兼容" C ++哲学"重新编码自己的智能指针。 实际上我将shared_ptr与weak_ptr一起用于项目,但它使代码过于复杂。 我当然可以使用raw_ptr,但是......它"普通c" ... 那你觉得怎么样? 我应该重新编写自己的智能指针还是继续使用shared_ptr和weak_ptr

1 个答案:

答案 0 :(得分:5)

  

与“C ++哲学”兼容,可以重新编码自己的智能指针

不,这是不必要的,浪费时间。标准库提供了智能指针,标准库在每个符合要求的实现中都可用。

除非您非常有充分理由不这样做,否则请使用using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.Xml.Linq; namespace ConsoleApplication1 { class Program { const string FILENAME1 = @"c:\temp\test.xml"; const string FILENAME2 = @"c:\temp\test1.xml"; static void Main(string[] args) { XDocument doc = XDocument.Load(FILENAME1); Dictionary<string, string> dict = doc.Descendants("Columns").FirstOrDefault().Elements() .GroupBy(x => (string)x.Attribute("XPath"), y => (string)y.Attribute("Name")) .ToDictionary(x => x.Key, y => y.FirstOrDefault()); XDocument order = XDocument.Load(FILENAME2); List<XElement> positions = order.Descendants("Position").ToList(); foreach (XElement position in positions) { foreach (XAttribute attribute in position.Attributes()) { string name = attribute.Name.LocalName; string value = (string)attribute; if(dict.ContainsKey("@" + name)) { string xName = dict["@" + name]; Console.WriteLine("Key = '{0}', Name = '{1}'", name, xName); } else { Console.WriteLine("Not in dictionary : Key = '{0}'", name); } } } } } }