-
0
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
class MyClass
{
public:
MyClass() {};
MyClass(const MyClass & M1) {
MyClass * T = this;
delete this;
T = new MyClass(M1);
}
~MyClass() {};
private:
};
int main(int argc, char *argv[])
{
MyClass A1;
MyClass *B=new MyClass(A1);
}
ОНО РАБОТАЕТ!...вечно правда...НО ПОЧЕМУ ЭТА ТВАРЬ РАБОТАЕТ??? какого можно удалять память... ещё не выделенную... если кто мне объяснит, я буду счастлив (ах да код появился при решении одной забавной задачки, что произойдёт с конструктором копирования при удалении указателя на свой же экземпляр класса)
cat_code,
13 Октября 2018
-
0
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
Vector_type(const Vector_type& m1) {
if (this->size != m1.size) {
if (this->size != 0)
destroy_memmory();
this->size = m1.size;
this->M = new m_type[size];
for (int i = 0; i < size; i++)
this->M[i] = m1.M[i];
}
else {
for (int i = 0; i < size; i++)
this->M[i] = m1.M[i];
}
};
Vector_type& operator = (const Vector_type& m1) {
if (this->size != m1.size)
throw "not right =";
this(m1);
return *this;
};
Действительно что могло пойти не так? просто копировать приравнять, копировать, приравнять, копировать...
cat_code,
12 Октября 2018
-
0
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
Vector_type(const Vector_type& m1) {
if (this->size != m1.size) {
if (this->size != 0)
destroy_memmory();
this->size = m1.size;
this->M = new m_type[size];
for (int i = 0; i < size; i++)
this->M[i] = m1.M[i];
}
else {
for (int i = 0; i < size; i++)
this->M[i] = m1.M[i];
}
};
Vector_type& operator = (const Vector_type& m1) {
if (this->size != m1.size)
throw "not right =";
for (int i = 0; i < size; i++)
this->M[i] = m1.M[i];
return *this;
};
Действительно что могло пойти не так? просто копировать приравнять, копировать, приравнять, копировать...
cat_code,
12 Октября 2018
-
−2
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
string rec(const string str, char c){return str;}
void cer(){}
main(){
string s,d="Text",a;
ifstream fin;
vector<string> mas;
fin.open("test.txt");
//if (fin.is_open()) cout<<"1";else cout<<"0";
while(fin>>s)
{bool f=0;
for(int i=0; i<s.size(); ++i)
if (s[i]==d[0])
{
f=1;
for (int j=0; j<s.size()&&j<d.size(); ++j)
if (d[j]!=s[i+j]) f=0;
if (f)
{
a.clear();
for (int j=0; j<i; ++j)
a=a+s[j];
a=a+"Hi";
for (int j=i; j<s.size(); ++j)
a=a+s[j];
}
}
if (f) {mas.push_back("\n");mas.push_back(a);mas.push_back("\n");}
else mas.push_back(s);
s=rec(s,'0');
}
ofstream fout;
fout.open("output.txt");
for (int i=0; i<mas.size(); ++i) fout<<mas[i]<<"\t";
}
ДД всем просветленным.
Есть код на С++ , который нормально компилируется и меняет текст в указанном файле. Вопрос: как его использовать для изменения данных при парсинге сайта. По логике Tokenizer передает лексемы в Parser для дальнейшего построения DOM. Значит надо добавить подобный код в Tokenizer, чтобы он передавал уже исправленные данные. Но на практике Tokenizer работает с Buffer(nsHtml5Tokenizer::tokenizeBuffer( nsHtml5UTF16Buffer* buffer)), причем с логическим(bool), а код для строчки из файла.
Как вариант добавить в сам Parser(nsHtml5Parser::Parse(const nsAString& aSourceBuffer, void* aKey, const nsACString& ContentType, bool aLastCall, nsDTDMode aMode) , но не могу разобраться как это сделать.
При компиляции вылетает куча ошибок.
Использованные файлы: nsHtml5Parser.cpp и nsHtml5Tokenizer.cpp, FireFox(версия 47), компилятор MSVS2013.
DrAli,
12 Октября 2018
-
+1
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
std::size_t fib(const std::size_t index) {
if (index < 3)
return !!index;
std::size_t f2 = 1; // f(n - 2)
std::size_t f1 = 1; // f(n - 1)
std::size_t result = 0;
for (std::size_t i = 2; i < index; ++i)
{
result = f1 + f2;
f1 = f2;
f2 = result;
}
return result;
}
Что Clang вытворяет с несчастной функцией Фибоначчи?
https://godbolt.org/z/2SFUm0
Elvenfighter,
10 Октября 2018
-
−2
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
int** delete_row(int** arr, int &row_count, int n)
{
delete arr[n-1];
for (int i = n-1; i < row_count-1; i++)
{
arr[i] = arr[i+1];
}
arr[row_count-1] = NULL;
delete arr[row_count-1];
row_count--;
return arr;
}
dumiv,
09 Октября 2018
-
−10
- 1
https://i.imgur.com/2GTA40l.png
j123123,
07 Октября 2018
-
−9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
BOOL ShaderElement::equal(ShaderElement* S)
{
if (nullptr == S && nullptr == this)
return TRUE;
if (nullptr == S || nullptr == this)
return FALSE;
return equal(*S);
}
https://www.linux.org.ru/forum/development/14512625
Elvenfighter,
05 Октября 2018
-
−3
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
#define m_from(format) \
char buff[128]; \
sprintf(buff, format, value); \
data_ = std::string(buff);
inline void fromShort(short value)
{
m_from("%i");
}
inline void fromInt(int value)
{
m_from("%i");
}
inline void fromLong(long value)
{
m_from("%li");
}
inline void fromFloat(float value)
{
m_from("%f");
}
inline void fromDouble(double value)
{
m_from("%f");
}
https://github.com/FlightBlaze/Newtoo/blob/master/modules/misc/USVString.h
Собственно, занесения в аналы ГК достоин весь этот класс целиком.
gost,
01 Октября 2018
-
−7
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
/*
Newtoo — разработка полноценного браузерного движка с нуля в 2018?
Так уж получилось, что в мире есть всего 4 популярных браузерных движка,
которые настолько сложны, что сами разработчики не знают и половины их
кодовой базы, и настолько продвинутые по технологиям, что начать их догонять —
пустая трата времени.
А так ли это на самом деле? Мой проект создан, чтобы повторить подвиги
современных браузерных движков и проверить, насколько ли реально создать
достойную альтернативу крупным проектам, история которых начинается с
девяностых годов. Мой новый движок создается с нуля, а значит его история
начинается — сегодня.
...
Те ошибки, которые были допущены на начальных стадиях разработки
остаются в проекте до конца. Самый яркий пример этому — умные
указатели в C++ — это еще более сложный синтаксис, большой оверхед
при работе, создании и удалении умных указателей. Кроме того, есть
очень много типов умных указателей и нужно знать, какой когда использовать,
ведь у каждого есть свои сюрпризы ньюансы. Посмотрите на этот файл из
WebKit. Когда видишь такой код, синтаксис умных указателей, пытаешься
успокоится и дышать ровно, но такого рода код — это весь вебкит с ног до
головы. В моем движке нет таких недостатков.
*/
Node* NodeListControlled::insertAt(unsigned long index, Node* child)
{
// mControl == vector<Node*>
mControl.insert(mControl.begin() + index, child);
return child;
}
Дело Попова, Бабушкина и иже с ними живёт!
У умных указателей оверхед большой, а вот List со вставкой за O(n) — это не недостаток, это фича.
А ещё там NamedNodeMap с тем же линейным поиском и практически полное игнорирование
передачи по ссылке — компилятор умный, авось, заоптимизирует как-нибудь.
https://sohabr.net/habr/post/424881/
https://github.com/FlightBlaze/Newtoo
gost,
01 Октября 2018