Различные методы для инстанцирования объекта в C++

Вы, вероятно, хотите использовать драгоценный камень https://github.com/sparklemotion/nokogiri .

Nokogiri (鋸) - это Rubygem, предоставляющий парсеры HTML, XML, SAX и Reader с поддержкой XPath и CSS-селекторов.

blockquote>
require 'nokogiri'

html = <
    link1
HTML doc = Nokogiri::HTML(html) doc.css('#block1 a[href]').text #=>link1

Чтобы изменить ваш пример:

require 'net/http'
require 'uri'
require 'nokogiri'
uri = URI.parse("https://www.example.com")
request = Net::HTTP::Get.new(uri)
request.content_type = "application/json"
request["Accept"] = "application/json"

req_options = {
  use_ssl: uri.scheme == "https",
}

response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(request)
end

response.body

doc = Nokogiri::HTML.parse(response.body)

doc.css('p').text;
#=> "This domain is established to be used for illustrative examples in documents. You may use this\n    domain in examples without prior coordination or asking for permission.More information..."

44
задан Robert S. 24 March 2009 в 14:33
поделиться

5 ответов

Второе является неправильным!

Можно использовать

MyClass object;

Это будет работать.

Теперь, касающееся, как выбрать между этими двумя возможностями, это главным образом, зависит от того, сколько времени Ваш объект должен жить. Посмотрите там для полного ответа.

43
ответ дан Community 26 November 2019 в 21:37
поделиться
Myclass *object = new Myclass(); //object has dynamic storage duration (usually is on the heap)
Myclass object; //object has automatic storage duration (usually is on the stack)

Вы создаете объекты с продолжительностью динамической памяти (обычно на "куче"), если Вы планируете использование их в течение длительного промежутка времени, и Вы создаете объекты с продолжительностью автоматического хранения (обычно на стеке) в течение короткого времени жизни (или объем).

69
ответ дан Joe Phillips 26 November 2019 в 21:37
поделиться

new оператор возвращает указатель на объект, который он создает, таким образом, выражение Myclass object = new Myclass(); недопустимо.

Другие языки не имеют явных указателей как C++, таким образом, можно записать операторы как Myclass object = new Myclass();, но в C++ это просто не возможно. Тип возврата new Myclass(); указатель на a Myclass объект, т.е. Myclass *.

13
ответ дан Welbog 26 November 2019 в 21:37
поделиться

Первый пример создает указатель на MyClass и инициализирует его для указания на результат нового оператора.

Второе, вероятно, не скомпилирует, поскольку это пытается создать MyClass, возражают и присваивают его указателю MyClass. Это могло работать в маловероятном случае, что у Вас есть конструктор MyClass, который принимает указатель MyClass.

8
ответ дан Fred Larson 26 November 2019 в 21:37
поделиться

Первое корректно.

Второе не будет обычно компилировать. И если это действительно компилирует затем класс, делает некоторые сложные вещи в конструкторе/операторе присваивания. И это, вероятно, пропускает память.

4
ответ дан Douglas Leeder 26 November 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: