Форум программистов, компьютерный форум CyberForum.ru

Реализовал shared pointer class. В каких местах можно улучшить ? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Стек или динамическая память!? http://www.cyberforum.ru/cpp-beginners/thread436988.html
Добрый вечер всем! Прошу ответить на вопрос (ниже приведен код): почему строка "Test!" выводится на экран? Она же не была создана в дин. памяти, т.е. должна была "загнуться" после 1ой строки main(). Заранее благодарен... #include <iostream> using namespace std; char *Test() { return "Test!"; }
C++ Подсчёт количества выпадений чисел в массиве. Имеется одноразрядный массив а с набором чисел в нем . Порядок чисел в массиве рандомный. То есть приблизительно может быть вот так: 19 4 45 32 48 и т.д. Как посчитать сколько раз каждое число повторяется в массиве. http://www.cyberforum.ru/cpp-beginners/thread436978.html
Не получается составить программу C++
По надёжным данным военной разведки,штаб противника находится на расстоянии R км от артиллерийской батареи.Из орудия в сторону цели производится выстрел под углом а градусов к горизонту.Скорость вылета снаряда из ствола - V м/с.Радиус зоны поражения снаряда - S .Напишите программу,которая определяет поражение цели или нет.Значения R,V,S,a вводятся с клавиатуры У меня получилось что программа...
C++ структура
#include<iostream.h> #include<conio.h> #include<string.h> #define n3 struct avtoprice { char marka ; int year,price; }; void auto_desh(struct Avtoprice*p);
C++ Посчитать сколько раз встречается каждый элемент в массиве. http://www.cyberforum.ru/cpp-beginners/thread436954.html
Не получается программа. Что не так? #include <stdio.h> using namespace std; const int n = 7; int main() { int a; int a1;
C++ структуры #include<iostream.h> #include<conio.h> #include<string.h> #define n3 struct avtoprice { char marka ; int year,price; }; void auto_desh(struct Avtoprice*p); подробнее

Показать сообщение отдельно
TonyM
1 / 1 / 0
Регистрация: 14.07.2011
Сообщений: 7
28.01.2012, 20:51     Реализовал shared pointer class. В каких местах можно улучшить ?
Изучаю с++, реализовал класс shared pointer(разумеется не в полной мере), хотелось бы услышать совета от людей более хорошо разбирающихся в с++, что можно было бы улучшить в имеющейся реализации.
Собственно код:
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "shared_ptr.h"
 
int main()
{
    {
        shared_ptr p1 = new Someclass();
        shared_ptr p2 = new Someclass();
 
        std::cout << p1->showA() << "\n";
        std::cout << (*p1).showA() << "\n";
 
        std::cout << p2->showA() << "\n";
        std::cout << (*p2).showA() << "\n";
    }
    system("pause");
    return 0;
}

shared_ptr.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef SHARED_PTR_H
#define SHARED_PTR_H
#include "storage.h"
class shared_ptr
{
    private:
        storage* ptr;
    public:
        shared_ptr (Someclass* pointer);
        ~shared_ptr ();
//      int getValue ();
        Someclass* operator-> ();
        Someclass& operator* ();
};
#endif

shared_ptr.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "shared_ptr.h"
 
shared_ptr::shared_ptr(Someclass* pointer)
{
    std::cout << "going into scope. creating shared pointer...\n" ;
    this->ptr = new storage(pointer);
}
 
shared_ptr::~shared_ptr()
{
    std::cout << "going out of scope. deleting shared pointer...\n" ;
    delete this->ptr;
}
 
Someclass* shared_ptr::operator-> ()
{
    std::cout << "operator '->' in class shared_ptr used...\n" ;
    return this->ptr->getObjectByPointer();
}
 
Someclass& shared_ptr::operator* ()
{
    std::cout << "operator '*' in class shared_ptr used...\n" ;
    return this->ptr->getObjectByLink();
}

someclass.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef SOME_CLS_H
#define SOME_CLS_H
#include <iostream>
class Someclass
{
    private:
        int a;
    public:
        Someclass ();
        int showA ();
};
#endif

someclass.cpp
C++
1
2
3
4
5
6
7
8
9
10
#include "some_cls.h"
Someclass::Someclass ()
{
    this->a = 10;
}
 
int Someclass::showA ()
{
    return this->a;
}

storage.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef STORAGE_H
#define STORAGE_H
#include "some_cls.h"
class storage
{
    private:
        Someclass *p;
        static int counter;
    public:
        storage(Someclass *pointer);
        ~storage();
        int getLinkCount();
        bool isNull();
        Someclass* getObjectByPointer();
        Someclass& getObjectByLink();
};
#endif

storage.cpp
C++
1
2
3
4
5
6
7
8
9
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
43
44
#include "storage.h"
 
storage::storage(Someclass *pointer)
{
    if(this->isNull())
    {
        this->p = pointer;
    }
    ++storage::counter;
    std::cout << "Now we have "<< storage::counter << " links to Someclass\n";
}
 
storage::~storage()
{
    --storage::counter;
    std::cout << "Now we have "<< storage::counter << " links to Someclass\n";
    if(counter == 0)
    {
        std::cout << "Deleting pointer to Someclass\n";
        delete this->p;
    }
}
 
int storage::counter = 0;
 
bool storage::isNull()
{
    if(this->p)
    {
        return false;
    }
 
    return true;
}
 
Someclass* storage::getObjectByPointer()
{
    return this->p;
}
 
Someclass& storage::getObjectByLink()
{
    return *this->p;
}


Ну и архив:
Вложения
Тип файла: rar shared_ptr.rar (1.9 Кб, 13 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru