Включите в класс Met функцию bool moved(), которая получает результат вызова pointer() и сообщает, был ли перемещен указатель

helloy

Включите в класс Met функцию bool moved(), которая получает результат вызова pointer() и сообщает, был ли перемещен указатель (вследствие перераспределения памяти). Напишите функцию main() для тестирования функции moved().
#include <iostream>
#include <string>
using namespace std;
typedef unsigned char byte;
 
class Mem{
    byte*mem;
    int size;
    void ensureMinSize(int minSize);
public:
    Mem(int sz=0);
    ~Mem();
    int msize();
    byte* pointer(int minSize=0);
};
 
 
class MyString {
    Mem*buf;
public:
    MyString();
    MyString(char *str);
    ~MyString();
    void concat(char*str);
    void print(ostream &os);
    bool moved();
};
 
 
Mem::Mem(int sz){
    mem=0;
    size=0;
    ensureMinSize(sz);
}
    
Mem::~Mem(){ delete []mem;};
int Mem::msize(){return size;};
 
 
void Mem::ensureMinSize(int minSize){
    if(size < minSize) {
        byte*newmem=new byte[minSize];
        memset(newmem+size,0,minSize-size);
        memcpy(newmem,mem,size);
        delete[]mem;
        mem=newmem;
        size=minSize;
    }
}
 
byte* Mem::pointer(int minSize){
    ensureMinSize(minSize);
    return mem;
}
 
 
 
 
 
 
    MyString::MyString(){
        buf=0;
        
    }
 
    MyString::MyString(char *str){
        if(!*str){
            buf=0;
            return;
        }
        buf=new Mem(strlen(str)+1);
        strcpy((char*)buf->pointer(),str);
    
    }
 
    MyString::~MyString(){
        delete buf;
    }
 
    void MyString::concat(char*str){
    if(!buf) buf=new Mem;
    strcat((char*)buf->pointer(buf->msize()+strlen(str)+1),str);
    }
 
    void MyString::print(ostream &os){
        if(!buf) return;
        os<<buf->pointer()<<endl;
        
    }
 
    bool MyString::moved(){ 
        /* как реализовать? */
 
        return true;
    }
 
 
 
int main(){
    
    MyString s("My test string");
    s.print(cout);
    s.concat(" some additional stuff");
    s.print(cout);
 
    MyString s2;
    s2.concat("Using default constructor");
    s2.print(cout);
    return 0;
}
1 ответ

helloy

вопрос то в чем заключается? в посте вижу только цитированное задание