Вы также можете создать собственную карту: https://www.highcharts.com/docs/maps/custom-geojson-maps
или удалить Канарские острова из графического изображения точки. , но тогда они полностью исчезнут с карты:
chart: {
events: {
load: function() {
var point = this.series[0].points[0],
pathArr = point.graphic.attr('d').split('M');
pathArr.shift();
point.graphic.attr({
'd': 'M' + pathArr[3]
});
}
}
}
Демонстрационная версия: http://jsfiddle.net/BlackLabel/6oa08vyd/
API: [ 113] https://api.highcharts.com/class-reference/Highcharts.SVGElement#attr
Довольно очевидно, что Вы хотите возвратить новый объект вызывающей стороне, на которую Вы не должны сохранять ссылку. С этой целью самая простая вещь сделать состоит в том, чтобы возвратить объект значением.
OtherClass Class::my_method( ... ) {
return OtherClass( ... );
}
Затем в коде вызова можно создать новый объект как это.
{
Class m( ... );
OtherClass n( m.mymethod( ... ) );
}
Это избегает любого беспокойства о возврате ссылки на временные файлы или требование клиента к удалению менеджера возвращенного указателя. Обратите внимание на то, что это действительно требует Вашего объекта быть copyable, но это - легальная и обычно реализовываемая оптимизация для копии, которой избежит при возврате значение.
Необходимо было бы только рассмотреть общий указатель или подобный при необходимости в совместно использованном владении или для объекта иметь время жизни вне объема функции вызова. В этом последнем случае можно оставить это решение до клиента и все еще возвратиться значением.
Например.
{
Class m( ... );
// Trust me I know what I'm doing, I'll delete this object later...
OtherClass* n = new OtherClass( m.mymethod( ... ) );
}
Да, который приведет к утечке памяти.
То, что Вы сделаете, в операторе возврата, разыменуйте новый объект, который Вы создали. Компилятор вызовет оператор присваивания как часть возврата и скопирует СОДЕРЖАНИЕ Вашего нового объекта к объекту, которому это присвоено в вызывающем методе.
Новый объект оставят на "куче" и ее указателе, очищенном от стека, таким образом создавая утечку памяти.
Почему бы не возвратить указатель и управлять им тот путь?
Вызов деструктора и освобождение памяти являются двумя отличными вещами в C++.
delete
действительно оба называет деструктор и освобождает память. delete[]
называет деструктор для выделенного числа элементов, затем освобождает память.
Когда OtherClass выходит из объема, деструктор называют, но память не освобождена.
Обычно, когда локальный объект выходит из объема, это - память, освобожден только потому, что он выделяется на стеке, и стек очищен автоматически. Так как Ваш объект выделяется на "куче", нет никакого способа, которым это может быть автоматически освобождено. Единственный способ освободить его состоит в том, чтобы звонить, удаляют явно.
Я думаю, что, вероятно, можно сделать это:
Объявите другой класс DummyClass
, которые содержат общедоступного участника, который является указателем на OtherClass
объект. В конструкторе DummyClass очистите указатель на ПУСТОЙ УКАЗАТЕЛЬ. В Вашей функции объявите объект типа DummyClass
, и его членский указатель для создания другого объекта типа OtherClass
. Затем в деструкторе DummyClass
, проверьте, является ли указатель НУЛЕВЫМ, если это не, удалите его. Таким образом Ваш объект будет очищен автоматически, когда объект DummyClass выйдет из объема.
Если возможный можно рассмотреть станд.:: auto_ptr или boost/c0x shared_ptr для упрощения управления памятью.
У Вас есть 2 объекта OtherClass:
Каждый - n, который создан на стеке и успешно удален, когда выходит из объема.
Другой является тем, который Вы создаете на "куче", внутри my_method. Этот никогда не удаляется, и это приведет к утечке памяти.
Если Вы настаиваете на выделении стека, не используйте new
оператор в my_method()
и передайте ссылку на n
вместо этого, т.е.:
void Class::my_method( OtherClass& other_object, ... ) {
other_object.init( ... );
}
Затем звоните my_method()
как это:
{
Class m( ... );
OtherClass n;
m.my_method( n, ... );
}
Чтобы этот шаблон работал, Class
должен реализовать некоторый init()
метод, который позволяет правильно инициализировать объекты, не вызывая конструктора.